没有附带的约束 - 这是什么意思?这个怎么运作?

时间:2012-07-27 07:37:39

标签: haskell haskell-platform

我在LYAH练习。

phoneBook.hs文件包含以下代码:

  

phoneBook :: [(String,String)]

在尝试编译上述代码时,我遇到以下错误:

  

*主> :加载“/home/optimight/phoneBook.hs”   [1/1]编译Main(/home/optimight/phoneBook.hs,解释)

     

/home/optimight/phoneBook.hs:1:1:       `phoneBook'的类型签名缺少附带的绑定   失败,模块加载:无。

在brano的答案和随后对此答案的评论之后添加了问题:我们如何为上述类型签名提供实施?

如果我加上这个:

  

输入phoneBook = [(String,String)]

我收到以下错误:

  

前奏> :加载“/home/optimight/phoneBook.hs”   [1/1]编译Main(/home/optimight/phoneBook.hs,解释)

     

/home/optimight/phoneBook.hs:2:6:       格式错误的类型或类声明:phoneBook   失败,加载模块:无

2 个答案:

答案 0 :(得分:7)

您需要为phoneBook提供实现。

phoneBook :: [(String, String)] 只是签名。

答案 1 :(得分:1)

如果要声明类型,则必须具有初始大写,即type PhoneBook = [(String, String)]

如果要声明一个函数,则需要提供其定义(绑定)或其定义和类型签名。编译代码的最小努力是:

phoneBook :: [(String, String)]
phoneBook = undefined

然后,您可以将undefined替换为[(String, String)]类型的任何值,例如[("Person","Number")]