内容简介:系列文章目前我们提到的所有函数、type 和 typeclass 都是 Prelude 模块的一部分,默认情况下,Prelude 模块会被自动导入。导入之后,该模块的所有函数就都进入了『全局』命名空间。
系列文章
- 《Haskell趣学指南》笔记之基本语法
- 《Haskell趣学指南》笔记之类型(type)
- 《Haskell趣学指南》笔记之函数
- 《Haskell趣学指南》笔记之高阶函数
- 《Haskell趣学指南》笔记之模块
- 《Haskell趣学指南》笔记之自定义类型
目前我们提到的所有函数、type 和 typeclass 都是 Prelude 模块的一部分,默认情况下,Prelude 模块会被自动导入。
导入模块
import ModuleName-- 导入模块的语句必须防止在函数定义之前 import Data.List (nub, sort) -- 只导入两个函数 import Data.List hiding (nub) -- 不导入 nub import qualified Data.Map -- 只能使用 Data.map.xxx 来使用函数 import qualified Data.Map as M -- 只能使用 M.xxx 来使用函数 复制代码
导入之后,该模块的所有函数就都进入了『全局』命名空间。
要查看函数位于哪个模块,可以用 Hoogle (www.haskell.org/hoogle/)。
在 GHCi 中导入模块的语句是:
ghci> :m + Data.List Data.Map Date.Set 复制代码
细节:点号既可以用于命名空间,又可以用于组合。怎么区分呢?当点号位于限定导入的模块名与函数中间且没有空格时,会被视作函数引用; 否则会被视作函数组合。
Data.List 模块
- words -- 取出字符串里面的单词,组成字符串列表
- group / sort / tails / isPrefixOf / any / isInfixOf 是否含于
- foldl' 不延迟的 foldl
- find / lookup
例子:
import Data.List wordNums :: String -> [(String, Int)] wordNums = map (\ws -> (head ws, length ws)) . group . sort . words 复制代码
Data.Char 模块
- ord 'a' -- 97
- chr 97 -- 'a'
Maybe 类型
findKey :: (Eq k) => k -> [(k, v)] -> Maybe v findKey key [] = Nothing findKey key ((k, v): xs) | key == x = Just v | otherwise = findKey key xs 复制代码
注意 Maybe / Nothing / Just 这三个东西。
Data.Map 模块
- API: fromList / insert / size / fromListWith
使用示例
import qualified Data. Map as Map phoneBook :: Map. Map String String phoneBook = Map. fromList $ [(" betty", "555- 2938") ,(" bonnie", "452- 2928") ,(" patsy", "493- 2928") ,(" lucille", "205- 2928") ,(" wendy", "939- 8282") ,(" penny", "853- 2492")] ghci> :t Map. lookup Map. lookup :: (Ord k) => k -> Map. Map k a -> Maybe a ghci> Map. lookup "betty" phoneBook Just "555- 2938" ghci> Map. lookup "wendy" phoneBook Just "939- 8282" ghci> Map. lookup "grace" phoneBook Nothing 复制代码
自定义模块
普通模块
-
新建 Geometry.hs
-
写文件
module Geometry ( sphereVolume , sphereArea ) where sphereVolume :: Float -> Float sphereVolume radius = (4.0 / 3.0) * pi * (radius ^ 3) sphereArea :: Float -> Float sphereArea radius = 4 * pi * (radius ^ 2) 复制代码
-
在同一目录的其他文件里引入模块
import Geometry
有层次的模块
-
新建 Geometry 目录
-
在 Geometry 目录里面新建 Sphere.hs / Cuboid.hs / Cube.hs
-
这三个文件的内容类似这样
module Geometry.Sphere ( volume , area ) where volume :: Float -> Float volume radius = (4.0 / 3.0) * pi * (radius ^ 3) area :: Float -> Float area radius = 4 * pi * (radius ^ 2) 复制代码
-
在 Geometry 目录的同级文件中导入模块
import Geometry.Sphere
以上所述就是小编给大家介绍的《《Haskell趣学指南》笔记之模块》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Rust学习笔记 - 模块系统
- Nginx源码阅读笔记-事件处理模块
- python 3.x 学习笔记7 ( 模块 )
- Java并发编程实战笔记3:基础构建模块
- 云办公系统 skyeye v3.5.1 发布,工作流模块以及笔记模块更新
- python 3.x 学习笔记8 (os模块及xml修改)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms on Strings, Trees and Sequences
Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99
String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!