Haskell 用于简单测试的多行 do 语句

Haskell mulitline do statements for simple testing

如果我想快速评估一堆单行相等性测试,我该如何在 Haskell 中执行此操作?我不想安装任何东西或做任何花哨的事情。

目前我可以一次 运行 这些语句,但我怎样才能在一行一行地执行它们的地方做到这一点?

这是一个有效的例子:

a = 5
b = 6
c = 7

tests2 = do
  a == 5
--  b == 6
--  c == 7

这个returns

True

因为 b 和 c 被注释掉了。但是,如果我尝试 运行 所有三个,像这样:

a = 5
b = 6
c = 7

tests2 = do
  a == 5
  b == 6
  c == 7

然后我得到一个错误。我怎样才能得到它 return

True
True 
True

这只是一个非常简单的问题,我正试图快速解决,我知道这不是正确的写法 Haskell,我可以做一些花哨的事情来检查,我只是在看超级简单快捷的东西。

一个do块不会任何事情。它是将项目绑定在一起的语法糖。但是对于表达式 do x,就等同于 x.

如果你这样写:

tests2 = do
  a == 5

那么这相当于:

tests2 = a == 5

因此,这是一个将 return 变成 Bool 的表达式。

如果你在 do 下写多个表达式,它会尝试将它们与 **(>>) :: Monad m => m a -> m b -> m b 绑定,所以:

tests2 = do
  a == 5
  b == 6
  c == 7

相当于:

tests2 = (a == 5) >> (b == 6) >> (c == 7)

但是 Bool 不带类型参数,所以不能工作。

如果你想打印结果,你可以使用print :: Show a => a -> IO () :

tests2 :: IO ()
tests2 = do
    print (a == 5)
    print (b == 6)
    print (c == 7)

ow tests2 具有类型 IO ().