タイトルについて申し訳ありませんが、短い文章で説明する方が良いかどうかはわかりません。型の関数に「決して評価されない」引数を表現する最善の方法は何ですか?
アイデアは、関数が1つの引数を受け入れてもそれを評価しないことを表現する関数型が必要です。
あり私は考えることができるいくつかの選択肢がある、と私は最高のものであろうかを知りたい:
(以下のすべての例については、Int
は、任意の具体的な種類からわずか任意の選択である)
-
は、
f ::() -> Int
を尽くすものとf
給f :: forall a . a -> Int
は、些細な値はf :: Void -> Int
を評価しなければ何もありません
- 他の方法があるかどうかわかりませんが、もしあればあなたの提案をしてください。私は最初の場所でこのような機能を必要とする理由について
f = absurd
と
f
には
undefined
または
let x = x in x
が適用される可能性がありますが、
f
が終了することがわかっている場合は、その引数が評価されないこともわかります。
:私は、ストリーム処理ライブラリを設計し、ストリームプロセッサの種類がSP <input-type> <output-type>
ようになるようにしたいと仮定し、それは、プロセッサは、任意の入力を必要としないことも可能です。これをArrow
にしたい場合は、ある時点で<input-type> -> <output-type>
のような関数を処理する必要があります。
これはおそらく関連しているでしょう:[*]なぜ、未使用の入力を閉じるためにHaskell Pipesが "use()"を使用し、未使用の出力を閉じるためにX(無人型) "?*](http://stackoverflow.com/q/35161616/ 2751851) – duplode
リンクのおかげで@duplode、私は '()'と 'Void'の選択の理由を理解しようとしていたので、それは重要です。 – Javran