Haskell ASCII码

时间:2013-09-28 16:01:22

标签: haskell module ascii

我正在尝试创建一个带 a 的函数(可以是任何类型:int,char ...)并创建一个包含该函数的列表输入复制了与其ASCII代码对应的次数。

我创造了这个:

  

toList n = replicate(fromEnum n)n

当尝试在cmd中使用该函数时,它表示它可以匹配期望的类型int与char,但是如果我直接在cmd中使用我的函数并且具有实际值它会执行它所假设的

我的意思是:toList'a' - >给我一个错误

复制(fromEnum'a')'a' - >给出一个没有问题的结果

我已加载模块Data.Char(ord)

我该如何解决这个问题?为什么会这样?

提前致谢:)

1 个答案:

答案 0 :(得分:4)

您缺少的是类型声明。你说你希望它能够采用任何类型,但你真正想要的是toList采取Enum的实例。当你在GHCi中玩它时,它会让你let toList n = replicate (fromEnum n) n,因为GHCi会自动选择一些看似有意义的默认值,但是在用GHC编译模块时,如果没有这种类型,它将无法工作宣言。你想要

toList :: (Enum a) => a -> [a]
toList n = replicate (fromEnum n) n

您必须在类型签名中包含(Enum a) =>的原因是因为fromEnum具有类型签名(Enum a) => a -> Int。所以你看到它不只是采用任何类型,只有那些拥有Enum实例的类型。