【发布时间】:2014-11-29 08:05:02
【问题描述】:
我有一个作业问题问我:
你能写一个 IO Int -> Int 类型的 Haskell 函数吗(不使用 unsafePerformIO)?如果是,请给出功能;如果不是,请说明原因。
我曾尝试写过这样的函数:
test :: IO Int -> Int
test a = do
x <- a
return x
但这不起作用。我试图让它工作一段时间,但我做不到,所以我认为这个问题的答案是否定的。但是,我不明白为什么这是不可能的。为什么它不起作用?
【问题讨论】:
-
提示:函数不必使用所有参数。
-
对不起,我不明白这对我有什么帮助。据我了解,我的函数只有一个参数,那就是“IO Int”。如果我这样做:
test :: IO Int -> Inttest a b = b我收到以下错误:The equation(s) for ‘test’ have two arguments, but its type ‘IO Int -> Int’ has only one -
该函数被允许使用其一个参数中的零个。它没有两个参数,所以你当然不能编写一个带有两个参数的模式。
-
啊。我曾想过这一点,但认为这是微不足道的。再想想,这似乎是正确的答案。谢谢!
-
另一个,也许更邪恶的提示:所有 Haskell 类型都有人居住:3 可能不是问题正在寻找的答案,但...