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 ()
.
如果我想快速评估一堆单行相等性测试,我该如何在 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 ()
.