Haskell:GHCi脚本与直接输入

时间:2017-01-02 08:36:29

标签: haskell

通过Hutton的新文本,我在ghci中遇到了奇怪的行为。当我从文本文件加载函数altmap时,它的行为正确;但是直接在ghci中输入相同的两行会产生如下错误:

*Main Lib> altmap f g [] = []

*Main Lib> altmap f g (x:y:xs) = (f x):(g y):(altmap f g xs)

*Main Lib> altmap (2*) (3*) [1,2,3,4,5,6]

[2,6,6,12,10,18*** Exception: interactive:2:1-49: Non-exhaustive patterns in function altmap

虽然我很喜欢,但有人可以解释“Prelude”和“Main Lib”之间的区别吗?我正在使用ghc 8.0.2的rc2版本

1 个答案:

答案 0 :(得分:0)

altmap的后一个定义会覆盖较旧的定义。因此,您实际上只定义了一种模式。

基本上,你这样做了:

ghci> x = 5
ghci> x = 42
ghci> print x
42

您需要在同一行中定义两者或使用多行:

*Main Lib> altmap f g [] = []; altmap f g (x:y:xs) = f x : g y : atmap f g xs

请注意,altmap f g xs也可以写为zipWith ($) (cycle [f,g]) xs

关于您的其他问题:>之前的模块是您当前导入的模块。因此,您导入了Main(包含所有符号)和Lib。有关更多信息,请查看GHC文档。