我正在研究差异列表并找到DList
类型
newtype DList a = DL { unDL :: [a] -> [a] }
和功能
dlToList :: DList a -> [a]
dlToList = ($[]) . unDL
我想知道该函数的非点免费版本是什么以及($[])
做了什么?
答案 0 :(得分:2)
查看函数的无点定义的第一步是恢复η减少:
dlToList = ($[]) . unDL
dlToList dl = (($[]) . unDL) dl
然后你开始申请从右到左的组合链:
dlToList dl = ($[]) (unDL dl)
然后您可以解压缩操作员部分†
dlToList dl = unDL dl $ []
然而,保持($[])
实际上是有意义的,因为这是差异列表和普通列表之间的必要转换器:它需要一个[a]->[a]
- 预置函数并将其应用于终结符[]
,产生一个具体的清单。
<小时/> † <子> 我们可以进一步简化:
dlToList dl = unDL dl []
顺便提一下,它可以以较短的方式再次无点:
dlToList = (`unDL`[])