basashi
ghciに`3 = 4`と入力してもエラーになりませんでしたが,`3`を評価させるとやはり`3`になります.`4` になると思ったのですが.GHCIは`3=4`をどのように処理したのでしょうか?
'a' = 1
はエラーになりますね。関係あるんでしょうか。f 3 = 4
f
を取り去ったものだと考えてください。f
は 3
を受け取ったら 4
を返す関数と定義されるので> f 3 4
'a' = 1
の件は私はちょっとぱっと見で分からないですね...x@3 = 4
と打ち込むと、変数 x
に何かが束縛されます。この x
を評価するとパターンマッチ失敗のエラーが出ますが、トップレベルの束縛は非正格なので束縛しただけではエラーになりません。この x@3 = 4
から x
への束縛を削除したのが 3 = 4
で、`3` というパターンに 4
をマッチさせている(が非正格なので評価は起こらない)、ということになります。変種として、BangPatternsの下で let !3 = 4
と打ち込むとパターンマッチが正格に行われてその場でエラーが出ます。'a' = 1
が型エラーになるのは x@'a' = 1
が型エラーになるのと同じです。> :set -XBangPatterns > let !3 = 4 in 9 *** Exception: <interactive>:17:5-10: Non-exhaustive patterns in 3 > let !4 = 4 in 9 9