回答:
TL; DR:ミランダはそれseq
をそれと呼びました、それはsequence
(おそらく)すでにモナドのためのものであり、短い間($!)
知られstrict
ていたときに導入されました。
それが呼び出されseq
、それが呼ばれたので、seq
中にミランダ少なくともによると、以前の言語ビーイングレイジー持つクラス:ハスケルの歴史ポール・ハダック、ジョン・ヒューズ、サイモンペイトンジョーンズとフィリップ・ワドラーによります。
seq
データ構造の両方と厳密なコンポーネントは同じ理由ですでにミランダに存在しており(Turner、1985)、seq
1980年代初頭以降、遅延プログラムでのスペースリークの修正に実際に使用されていました(Scheevel、1984、Hughes、1983)。
ターナーは1985年の論文で厳密なコンポーネントのみを紹介し、seq
それ自体は紹介していないことに注意してください。Schevelの「NORMA Saslマニュアル」は失われているか、少なくともインターネットでは入手できないようです。ヒューズの論文(上記の「ヒューズ、1983」)ではseq
どちらも紹介されていません。
どちらにしてもseq
、Mirandas標準環境の一部であり、それが呼び出された理由のヒントも含まれていますseq
。
2つの値に適用された `seq 'は2番目の値を返しますが、最初の値が完全に未定義ではないことを確認します。対話型プログラムでの正しい同期を保証するためなどに必要な場合があります。
正しい同期または配列の uencing。
さて、なぜstrict
Haskellでそれが単に呼び出されなかったのですか?それともsequence
?
さて、導入したHaskell 1.3seq
も導入Monad
したことがわかりましたsequence :: Monad m => [m a] -> m ()
。したがって、sequence
名前として使用できませんでした。
これで問題sequence
は解決しました。次に、を見てみましょうstrict
。strict
1.3 はEval
typeclassを導入して以来、1.3に含まれていました:
seq :: Eval a => a -> b -> b
strict :: Eval a => (a -> b) -> (a -> b)
strict f = \x -> seq x (f x)
また、Haskell98をそのままカットすることEval
もstrict
しなかった。代わりに、Eval
すべてのタイプに適用され、strict
名前がに変更されたため、完全に削除されました($!)
。
seq
、1.3には適切な.ps
HTMLリリースが手元にあります。モナドI / Oが祝われた理由を知りたい場合は、古い[Request] -> [Response]
ベースのIOモデルを調べてください。古い会議の議事録は別として、クラスで怠惰であることは、おそらくさらに検討するのに最適なリソースです。