小编00d*_*ani的帖子

类型MonadPlus,Alternative和Monoid之间的区别?

标准库的Haskell类型类MonadPlus,Alternative以及Monoid各自提供两种方法具有基本相同的语义:

  • 空值:mzero,emptymempty.
  • 操作员a -> a -> a,在类型类联接值加在一起:mplus,<|>mappend.

所有这三个都规定了应遵守的法律:

mempty `mappend` x = x
x `mappend` mempty = x
Run Code Online (Sandbox Code Playgroud)

因此,似乎三个类型都提供相同的方法.

(Alternative也提供somemany,但它们的默认定义通常是足够的,所以它们在这个问题上并不太重要.)

所以,我的疑问是:为什么这三个极为相似的类?除了不同的超类限制之外,它们之间是否有任何真正的区别?

haskell functional-programming typeclass applicative monoids

80
推荐指数
1
解决办法
5625
查看次数

Yesod.Auth - 如何要求第二因素身份验证?

我目前正在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

7
推荐指数
0
解决办法
162
查看次数

从未编写任何自动化测试,我应该如何开始行为驱动的开发?

我已经用很多语言编程多年了,并且认为我一般都很擅长它.但是,我从未编写任何自动测试:没有单元测试,没有TDD,没有BDD,没有.

我已经尝试为我的项目开始编写适当的测试套件.我可以看到在进行任何更改后能够自动测试项目中所有代码的理论价值.我可以看到像RSpec和Mocha这样的测试框架应该如何设置和运行所述测试相当容易,我喜欢他们为编写测试提供的DSL.

但我从来没有设法为我的代码的任何部分编写实际的单元测试.我写的东西似乎从来没有以一种实际有用的方式测试.

  • 函数在使用它们的上下文之外似乎不是非常可调用的.我编写的许多函数都会进行HTTP请求调用,数据库查询或其他一些不易测试的调用.
  • 某些函数返回HTML字符串.我可以将HTML字符串与同一字符串的硬编码版本进行比较,但这似乎只限制了我更改代码部分的能力.在我的测试代码中加载大量HTML也是一团糟.
  • 我可以将mock/spy对象传递给一个方法,并确保它们获得某些方法调用,但据我所知,这只是测试我正在"测试"的方法的实现细节.

我将如何开始正确的BDD测试?(我最好喜欢使用Mocha和Node.js这样做,但对BDD的一般建议也很好.)

ruby bdd rspec mocha.js node.js

6
推荐指数
1
解决办法
232
查看次数