Haskell差异列表和点自由函数

时间:2016-04-17 20:24:16

标签: haskell pointfree

我正在研究差异列表并找到DList类型

newtype DList a = DL { unDL :: [a] -> [a] }

和功能

dlToList :: DList a -> [a]
dlToList = ($[]) . unDL

我想知道该函数的非点免费版本是什么以及($[])做了什么?

1 个答案:

答案 0 :(得分:2)

查看函数的无点定义的第一步是恢复η减少:

dlToList = ($[]) . unDL
dlToList dl = (($[]) . unDL) dl

然后你开始申请从右到左的组合链:

dlToList dl = ($[]) (unDL dl)

然后您可以解压缩操作员部分

dlToList dl = unDL dl $ []

然而,保持($[])实际上是有意义的,因为这是差异列表和普通列表之间的必要转换器:它需要一个[a]->[a] - 预置函数并将其应用于终结符[],产生一个具体的清单。

<小时/> <子> 我们可以进一步简化:

dlToList dl = unDL dl []
顺便提一下,它可以以较短的方式再次无点:

dlToList = (`unDL`[])