2018-11-16 Xie Jingyi
新类型有自己的 data constructor (literals 可以看成特殊的 data constructor),由这一点来区分是否创建了新类型。 data 创建了新类型,可以有多个 data constructor。 newtype 创建了新类型,只能有一个 data constructor,同时新类型的内存布局与原来的类型相同。 type 没有创建新类型,只是建立了 alias,没有新的 data constructor。 type 常用于语义化类型,是业务逻辑层的概念。 ```haskell type ID = Int a = 1 :: ID b = a + 2 -- legal showID :: ID - 继续阅读 »
2018-11-10 Xie Jingyi
Prelude.foldl foldl 为 left-associative folding。 haskell foldl :: (b -> a -> b) -> b -> [a] -> b foldl f acc [] = acc foldl f acc (x:xs) = foldl f (f acc x) xs foldl (+) 0 [1..3] 等价于 (((0 + 1) + 2) + 3)。 尾递归,因此有 strict 版本 foldl' 求值时必须先到达栈底,遍历完列表,因此无法处理无穷列表 Data.List.foldl' foldl' 为 foldl 的 TRO 版本。 Prelude.foldr 继续阅读 »
2018-11-18 Xie Jingyi
Motivation Functor solves the problem of mapping regular one-parameter functions into a sub-category, but that's not easy for functions with more than one parameters. Let's consider a function with two parameters f :: a -> b -> c, which can also read as a -> (b -> c). Applying fmap on f, we will get fmap f :: m a -> 继续阅读 »