2010-11-22 74 views
12

我是哈斯克尔的新手,试图完成凯撒密码演习。如何使用Haskell库函数?

.hs文件中,我定义了以下功能:

let2int :: Char -> Int 
let2int c = ord c - ord 'a' 

然后我试图通过键入:l caeser.hs加载到这个GHCI,我得到了以下错误消息:

[1 of 1] Compiling Main    (caeser.hs, interpreted) 
caeser.hs:2:12: Not in scope: `ord' 
caeser.hs:2:20: Not in scope: `ord' 

从我使用的书,我的印象是,ordchr是在字符和整数之间转换的标准函数,但似乎很明显我需要“导入”它们或其他东西。这是如何完成的?

+2

顺便说一句,你拼错“凯撒” – wnoise 2010-11-22 19:48:32

+0

我一直在寻找加载从GHCI命令行库,我发现你可以使用这个命令在命令行: `:m Data.Char` – metatron 2018-02-03 11:21:46

回答

3

如果您使用hoogle搜索ord,您会看到该函数存在于/由Data.Char模块导出。因此,只需导入此模块:

import Data.Char 

学习使用hoogle。许多SO Haskell的问题都是人们不了解Hoogle的结果......有时他们也不知道谷歌(不要阻止你询问,而是使用hoogle)。

今后,对于可能有冲突的名称与现有的功能,较大的图书馆,你可以限制你的导入只是你所关心的功能:

import Data.Char (ord) 

或者导入qualified

import qualified Data.Char as C 
... 
func x y = C.ord x - C.ord y 

(第三种方法,使用hiding,工作但我讨厌那种方法)

9

在“Haskell 2010”,ord个生活Data.Char

所以你要import Data.Charimport Data.Char (ord)

在 “哈斯克尔98”,ord可以在模块Char中找到。

查找功能及其模块的一个伟大的工具是

http://www.haskell.org/hoogle/