私は少し前にこの問題に遭遇しました。列挙型の構成を作成するには、最初に Iteratee (または Enumerator) が必要です。
これを行うことで開始できます:
モジュールのメイン
import Data.Enumerator
修飾された Data.Enumerator.List を EL としてインポート
メイン :: IO ()
main = run_ (enum $$ EL.consume) >>= 印刷
どこ
enum = (enumList 5 [1..] $= EL.isolate 100) $= EL.filter ペア
ペア = (==0) . (`mod` 2)
前のコードは、enumeratee のリストを一緒に構成して新しい列挙子を作成し、consume Iteratee に適用されます。
($=) はEnumerator と Enumeratee を構成して新しい enumerator を作成するのに役立ちますが、(=$) はEnumeratee で Iteratee を構成して新しい Iteratee を作成するために使用できます。(=$) を使用して列挙型のリストを作成するときに型がボールを破壊しないことを考えると、後者をお勧めします。
モジュールのメイン
import Data.Enumerator
修飾された Data.Enumerator.List を EL としてインポート
メイン :: IO ()
main = run_ (enumList 5 [1..] $$ it) >>= 印刷
どこ
it = フォルダ (=$)
EL.消費
[ EL.isolate 100
, EL.filter ((==0) . (`mod` 2))
]
Iteratee の代わりに Enumerator を作成して上記と同じ関数を実装しようとすると、 を使用すると無限再帰型エラーが発生しfoldl' ($=) (enumList 5 [1..]) [list-of-enumeratees]
ます。
お役に立てれば。