使GHC post FTP成为FTP之前的感觉

alg*_*fic 6 haskell ghc

为了使用最新版本的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版本的建议).

bit*_*app 9

这可能很好,但我们决定采用不那么乏味的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)

在那个和示例和练习中断言的类型之间,这已经足够了,如果他们偶然遇到一个带有可折叠的类型,它不会引起麻烦,因为我们告诉他们事情是如何变化的.

让他们进口东西而不是费心去告诉他们发生了什么似乎很脆弱,因为如果他们离开快乐的道路他们会感到困惑.


alg*_*fic 7

一个选项表明如下:

$ 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)

  • 或者更好:定义你自己的comppat.模块基于bitemyapp的答案,让他们看到并理解其内容. (3认同)