Haskellホームズの不明瞭なタイプ


アイデアには曖昧さがありますが、一般的なバイブは、いくつかの本や論文の言い訳のように、タイプセーフティの1つは、そうでなければ真の値に評価されるいくつかの式が、入力された理由によって拒否されるという事実であるという事実です.理由は、例えばif then else 彼ら自身の既知のタイプのインスタンスの中で本当か本当の価値に、彼ら自身が評価するかもしれませんif such expression is true then this expression is true , 2番目の式は、最初の式の型に従っていないため、最初に評価された場合は、この新しいイベントが発生した場合にのみ拒否されます.一般的な例はif True then 1 else False 2つの値を含むBoolクラスの型値のブール値の場合True and False などの論理関数型not :: Bool -> Bool これは1つのboolから別のboolの関数であるsoso、あなたがそのものの逆を得る何かを否定するとき、そのタイプユニバースの中で何か他の何かを見てください.trueが偽でない場合、negate 5は- 5です.もし、そのような式が真に評価されたなら、この場合は整数、つまり整数を呼ぶことになります.1 :: Integer それは数のクラスに属する.1 :: Num p => p しかし、あなたはすべて知っている.明らかに、これは無効な文(2つの式の間の無効なタイプ推論)がboolと1番の間であるようです.
ワトソン:の代わりにFalse 私たちは何かを持っているotherwise "play me an ambient like Jedimind soundtrack now" ? それは単純なものとは少し違いますかFalse . ここで何が起きているのか、なぜ最初は悪いことなのか.

Haskell :しかし、ワトソン、私の親愛なる友人は、それが十分な情報でない代数構造をつくることについてである残りについてでありません.
ワトソン:どんな情報?何かが本当ならば、私に1を与えてください.何がそんなに奇妙ですか.あなたはすべてを質問するようです、私はあなたが私が知っているすべてのためにあなたの犬Haskellという名前をとって驚いていません.
Haskell :ワトソンは犬を飼っていないのですが、もし私が犬を飼っていたら、最初に知っているでしょう.
ワトソン:そこに、あなたが今私が今したならば、あなたはちょうど言いました、我々は例としてそれをすることができましたか?
Haskell:ワトソン私の少年はちょうど1つ別の数学的な領域からジャンプすることはできません方法に沿って任意のミルクをこぼさないことを期待.あなたの推論が現在そのピークにある明白な理由は、あなたが方法が完全に1つのインスタンスからもう一つへ変わる方法に気づいていないということです.
簡単に言えば、計算が進化する方法は、構造体がコード化する言語によって異なります.また、別の構造体を別の構造体に合成する方法によって異なります.次のようにしてください.それがとても単純であるので、私はブールとしてそれを記述しています、それは実際にboolからboolに行きます.しかし、私たちはHaskellersです、そして、これは中世からの古いアーティファクトです、そして、あなたがWatson私の友人生活が複雑で、それから他の声明があなたのちっぽけな小さい脳からあなたを救うつもりであるならば、それ以外の声明のない機能を定義することを実践することを提案します.あなたは右から間違って知ることはありません.
ワトソン:すべての権利ホームズ、私に教えてくださいEither タイプ?data Either a b ? また、AかBがどちらがあなたのためにもそうすることができたことを選ぶので、より自由に定義されているif - then - else声明のようですif True then a and if True then b . 如何ですか.
ハスケル:ブラボーワトソン、あなたは再びそれをしました!Either データ型は1つの値または別の値を表します.Either a b として我々はさらに実現することができますLeft a| Right b そして、我々が我々が持っているならば、我々がこれらのleftsと権利を与えられるように思われるかもしれませんif then else いずれかの前に、我々は実際にいくつかの前提条件をチェックし、その後、これらのエーテルのいずれかを適用する.
data Either a b = Left a | Right b

firstCondition = Left True
secondCondition = Right 1
ワトソン:これは私を超えています.
Haskell :私の親愛なるワトソンは、私たちはあなたがすぐにこのケースを調査する必要があります!タクシーを呼んで!