【发布时间】:2014-07-27 03:41:10
【问题描述】:
^-- 不,不完全是。我的问题涉及以交互方式添加模式和类型签名......这显然是不可能的。
你可能在早期教程中尝试做的最基本的事情在 GHCi 中不起作用:
foo [] = []
foo (x:xs) = x : foo xs
如果您将其放入 foo.hs 并在 GHCi 提示符处键入 :load foo.hs,则可以。然后,您可以在列表上调用 foo 并取回该列表。
早期的 Google 搜索告诉您,在 GHCi 中您需要一个 let 声明。但是在这种情况下(一个定义了多种模式的函数)它就不起作用了:
Prelude> let foo [] = []
Prelude> let foo (x:xs) = x : foo xs
Prelude> foo [1, 2, 3]
[1,2,3*** Exception: <interactive>:3:5-27: Non-exhaustive patterns
in function foo
第二个“let”覆盖了第一个“let”。省略 let 不是一种选择。如果你输入像foo :: [a] -> [a] 这样的表达式,它也不喜欢它。
教程似乎回避了这一点,并让您快速将代码放入文件中。如果您不想制作文件并希望以交互方式工作怎么办?有哪些选择?
【问题讨论】:
-
@IonuțG.Stan 我读过。那不是同一个问题。并且“让”语句将与它之后的所有内容组合在一起的知识是一个非常特殊的奇怪现象。所以基本上,如果我有一个充满教程定义的文件,我会说一次“让”,随后的内容是什么并不重要?