0
私は、差分リストを調査し、私は、関数の非点無料版は何か疑問に思ってDList
タイプHaskellの差リストとポイントフリー機能
newtype DList a = DL { unDL :: [a] -> [a] }
と機能
dlToList :: DList a -> [a]
dlToList = ($[]) . unDL
を発見しました。 ($[])
は何をしていますか?
私は、差分リストを調査し、私は、関数の非点無料版は何か疑問に思ってDList
タイプHaskellの差リストとポイントフリー機能
newtype DList a = DL { unDL :: [a] -> [a] }
と機能
dlToList :: DList a -> [a]
dlToList = ($[]) . unDL
を発見しました。 ($[])
は何をしていますか?
機能のポイントフリーの定義に見ての最初のステップは、η -reductionを元に戻すことです。
dlToList = ($[]) . unDL
dlToList dl = (($[]) . unDL) dl
その後、あなたは右から左へ、組成チェーンに適用を開始:
dlToList dl = ($[]) (unDL dl)
オペレータセクション&daggerをアンパックできます。
dlToList dl = unDL dl $ []
これは、差分リストと通常のリストの間の本質的なコンバータであるため、しかし、それは実際にあるよう($[])
を維持することは、理にかなって:それは[a]->[a]
-prepender機能を取り、ターミネータ[]
に適用し、その結果具体的なリストで
dlToList dl = unDL dl []
:
dlToList = (`unDL`[])
はまた、あなたはどうするか私に説明することができますがこれは機能しますか? 'emptyDL :: DList a' ' emptyDL = DL id' –
空の相違点リストは、(空の)ターミネータリストが渡されたときにその結果と同じリストを与えるだけのリスト前置機能です。 – leftaroundabout
しかし、DL ::([a] - > [a]) - > DList aと 'id :: a - > a 'の型を見ると、 –