提问人:13sen1 提问时间:12/12/2020 更新时间:12/13/2020 访问量:51
用于简单测试的 Haskell 多段 do 语句
Haskell mulitline do statements for simple testing
问:
如果我想快速评估一堆单行相等性测试,我该如何在 Haskell 中做到这一点?我不想安装任何东西或做任何花哨的事情。
目前,我可以一次运行一个语句,但是我怎么能在它逐行执行它们的语句中做到这一点呢?
下面是一个有效的示例:
a = 5
b = 6
c = 7
tests2 = do
a == 5
-- b == 6
-- c == 7
这将返回
True
因为 B 和 C 被注释掉了。但是,如果我尝试运行所有三个,如下所示:
a = 5
b = 6
c = 7
tests2 = do
a == 5
b == 6
c == 7
然后我收到一个错误。我怎样才能让它回来
True
True
True
这只是一个非常简单的问题,我试图快速解决,我知道这不是编写 Haskell 的正确方式,我可以做一些花哨的事情来检查,我只是在寻找一些超级简单和快速的东西。
答:
4赞
willeM_ Van Onsem
12/12/2020
#1
块不执行任何操作。将项目结合在一起是句法糖。但对于一个表达式来说,就等价于 。do
do x
x
如果你这样写:
tests2 = do
a == 5
那么这相当于:
tests2 = a == 5
因此,这是一个将返回 .Bool
如果你在 a 下写多个表达式,它将尝试用 **(>>) :: Monad m => m a -> m b -> m b 绑定
这些表达式,所以:do
tests2 = do
a == 5
b == 6
c == 7
相当于:
tests2 = (a == 5) >> (b == 6) >> (c == 7)
但是 a 不取类型参数,所以不能工作。Bool
如果要打印结果,可以使用 print :: Show a => a -> IO () :
tests2 :: IO ()
tests2 = do
print (a == 5)
print (b == 6)
print (c == 7)
ow 的类型为 。tests2
IO ()
评论
print
do
do
a = 5 b = 6 c = 7 tests2 = do print ( a == 5 ) print ( b == 6 ) print ( c == 7 )
tests2 = [ a == 5, b == 6, c == 7 ]
{}
do
case
of
where
let
;
case
a, b, c :: Int; a = 5; b = 6; c = 7; tests2 :: IO (); tests2 = do { print (a == 5); print (b == 6); print (c == 7); };
a `mod` b