gpt4 book ai didi

haskell - 不明确的出现 `Just'

转载 作者:行者123 更新时间:2023-12-01 08:35:25 25 4
gpt4 key购买 nike

我是一个绝对的初学者。使用 emacs 浏览 LYAH。

我目前的设置:

  • Ubuntu 12.04 LTS(使用体验 - 初学者)
  • GNU Emacs 23(使用经验 - 初学者)
  • 能够在haskell主要模式下工作

  • Point 2 described here. 发现难以遵循说明(带上 Haskell 库)

    还需要指导才能启用 Scion IDE .

    问题:

    .hs 代码
    data Maybe a = Nothing | Just a

    运行代码时,我收到以下错误:

    请忽略打字错误,原贴:
    *Main> just "Haha"  

    互动>:339:1:不在范围内:“只是”

    这是真正的错误 (在 Tikhon Jelvis 评论后添加):
    *Main> Just "Haha"  
    interactive>:341:1:
    Ambiguous occurrence `Just'
    It could refer to either `Main.Just',
    defined at /home/optimight/baby.hs:89:26
    or `Prelude.Just',
    imported from `Prelude' at /home/optimight/baby.hs:1:1
    (and originally defined in `Data.Maybe')

    最佳答案

    您的错误只是告诉您 Just 有两种可能的版本而 GHCi 不知道该选择哪一个。

    每个 Haskell 程序都隐式地导入了一大堆函数和数据类型。这些构成了“前奏”。其中一种类型是 Maybe .这意味着每个程序都可以访问与您定义的类型完全相同的类型。

    您可以通过两种方式克服这一点。最好的选择是选择不同的名称:

    data MyMaybe a = MyJust a | MyNothing

    (我相信你可以想出比这更好的名字:P。)

    另一种选择是显式导入 Prelude,隐藏 Maybe :
    import Prelude hiding (Maybe (..))

    程序顶部的这一行只是告诉 Haskell 导入它通常导入的所有内容,除了 Maybe以及所有的构造函数( JustNothing )。

    现在您将遇到另一个问题:GHCi 不知道如何呈现您的 Maybe 的值。键入一个字符串以显示在提示中。你会得到这样的错误:
    <interactive>:1:1:
    No instance for (Show (Maybe [Char]))
    arising from a use of `print'
    Possible fix: add an instance declaration for (Show (Maybe [Char]))
    In a stmt of an interactive GHCi command: print it

    你需要做的是告诉编译器如何 Maybe值看起来像一个字符串。令人高兴的是,这非常容易。其实很简单,电脑也能做到!如果您将类型定义为:
    data Maybe a = Just a | Nothing deriving (Show)

    那么编译器会写一个 show函数(基本上是来自其他语言的 toString)。现在您的原始语句 ( Just "Haha" ) 应该可以正常工作了。

    另外:启用 Scion 是一个完全不同的问题。我认为在您了解更多 Haskell 并实际从事某种更大的项目之前,不值得为此烦恼。目前,标准的 Haskell 模式应该绰绰有余。

    关于haskell - 不明确的出现 `Just',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589207/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com