首页 文章

我如何使用Haskell库函数?

提问于
浏览
12

我是一个Haskell新手,试图完成一个Caesar密码练习 .

.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 是用于在字符和整数之间进行转换的标准函数,但似乎很明显我需要"import"或者其他东西 . 这是怎么做到的?

3 回答

  • 9

    它们是标准功能,但您需要先从正确的模块导入它们 . 加

    import Data.Char
    

    到ceaser.hs它应该工作 .

    有关编译器附带的完整库集,另请参阅http://www.haskell.org/ghc/docs/latest/html/libraries/index.html .

  • 3

    在"Haskell 2010", ord 位于 Data.Char

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

    在"Haskell 98"中, ord 可以在 Char 模块中找到 .

    查找功能及其模块的绝佳工具是

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

  • 19

    如果您使用hoogle搜索ord,您将看到该函数存在于/3040980_模块中 . 所以只需导入这个模块:

    import Data.Char
    

    学习使用hoogle . 提出的许多SO Haskell问题都是人们不了解Hoogle的结果......有时候他们也不一定要了解Google(不要劝阻你不要问,但要使用hoogle) .

    将来,对于可能与现有函数具有冲突名称的较大库,您可以将导入限制为您关注的函数:

    import Data.Char (ord)
    

    或者导入 qualified

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

    (第三种方法,使用 hiding ,有效,但我讨厌这种方法)

相关问题