标准库的Haskell类型类MonadPlus,Alternative以及Monoid各自提供两种方法具有基本相同的语义:
mzero,empty或mempty.a -> a -> a,在类型类联接值加在一起:mplus,<|>或mappend.所有这三个都规定了应遵守的法律:
mempty `mappend` x = x
x `mappend` mempty = x
Run Code Online (Sandbox Code Playgroud)
因此,似乎三个类型都提供相同的方法.
(Alternative也提供some和many,但它们的默认定义通常是足够的,所以它们在这个问题上并不太重要.)
所以,我的疑问是:为什么这三个极为相似的类?除了不同的超类限制之外,它们之间是否有任何真正的区别?
haskell functional-programming typeclass applicative monoids
我目前正在Yesod 1.4.5中构建一个个人网站,目前我正在实施身份验证.使用用户名和密码进行身份验证非常简单 - 我使用Yesod.Auth.HashDB - 但由于我非常注重安全性,所以我还想要第二个因素.
Yesod.Auth是否支持多因素身份验证?它肯定支持多个auth插件,但据我所知,这些插件似乎被视为替代身份验证方法而不是其他强制身份验证因素.可以通过某种方式组合auth插件,在HashDB周围"包装"MFA插件吗?在消息来源中似乎没有这方面的功能.
如果这确实不受支持,我如何才能从外部扩展Yesod.Auth以添加MFA?扩展有状态的Haskell包很难,我可以使用一些提示.
理想情况下,我想支持U2F安全密钥和TOTP代码,但只支持后者仍然会非常好.
authentication haskell one-time-password yesod two-factor-authentication
我已经用很多语言编程多年了,并且认为我一般都很擅长它.但是,我从未编写任何自动测试:没有单元测试,没有TDD,没有BDD,没有.
我已经尝试为我的项目开始编写适当的测试套件.我可以看到在进行任何更改后能够自动测试项目中所有代码的理论价值.我可以看到像RSpec和Mocha这样的测试框架应该如何设置和运行所述测试相当容易,我喜欢他们为编写测试提供的DSL.
但我从来没有设法为我的代码的任何部分编写实际的单元测试.我写的东西似乎从来没有以一种实际有用的方式测试.
我将如何开始正确的BDD测试?(我最好喜欢使用Mocha和Node.js这样做,但对BDD的一般建议也很好.)