【问题标题】:Haskell: GHCi script versus direct entry [duplicate]Haskell:GHCi 脚本与直接输入 [重复]
【发布时间】:2017-05-16 08:49:34
【问题描述】:

在阅读 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 版本

【问题讨论】:

  • 请注意,在版本 8 之前的 GHCi 中,您必须使用 let ... = ...

标签: haskell


【解决方案1】:

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 文档了解更多信息。

【讨论】:

  • 嗯。现在我找到了重复项,我应该删除我的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 2018-07-02
  • 2016-08-16
  • 2020-02-22
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多