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