为了使用最新版本的GHC向初学者教授Haskell,由于Foldable-Traversable-in-Prelude(FTP),某些功能的类型可能会令人困惑.例如,在列表,如基本功能length
,sum
并且product
具有类型,包括的Foldable
约束foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
.类似地,对于一些介绍性更高阶函数,例如foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
.
什么是临时启用FTP前行为的轻量级方法?然后初学者仍然可以享受最近GHC的所有好处,而不必尝试安装旧版本或使用Hugs(例如edX FP101x 2015版本的建议).
这可能很好,但我们决定采用不那么乏味的http://haskellbook.com/,我们所做的是我们解释了什么改变了,并告诉他们如何断言基于列表的类型.
Prelude> :t length
length :: Foldable t => t a -> Int
Prelude> :t length :: [a] -> Int
length :: [a] -> Int
Run Code Online (Sandbox Code Playgroud)
在那个和示例和练习中断言的类型之间,这已经足够了,如果他们偶然遇到一个带有可折叠的类型,它不会引起麻烦,因为我们告诉他们事情是如何变化的.
让他们进口东西而不是费心去告诉他们发生了什么似乎很脆弱,因为如果他们离开快乐的道路他们会感到困惑.
一个选项表明如下:
$ ghci
Prelude> import Prelude hiding (length, sum, product, foldr, foldl, and, or, any, all)
Prelude> import GHC.OldList
Prelude GHC.OldList>
Run Code Online (Sandbox Code Playgroud)
然后你得到隐藏的所有东西的旧类型,例如
length :: [a] -> Int
sum :: Num a => [a] -> a
product :: Num a => [a] -> a
foldr :: (a -> b -> b) -> b -> [a] -> b
foldl :: (b -> a -> b) -> b -> [a] -> b
and :: [Bool] -> Bool
any :: (a -> Bool) -> [a] -> Bool
all :: (a -> Bool) -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154 次 |
最近记录: |