haskell-jp / beginners #19 at 2022-01-14 14:45:45 +0900

ghciに`3 = 4`と入力してもエラーになりませんでしたが,`3`を評価させるとやはり`3`になります.`4` になると思ったのですが.GHCIは`3=4`をどのように処理したのでしょうか?
何もわかりませんが、 'a' = 1 はエラーになりますね。関係あるんでしょうか。
無意味なパターンマッチをしています。
f 3 = 4

みたいな定義から f を取り去ったものだと考えてください。
この場合は f3 を受け取ったら 4 を返す関数と定義されるので
> f 3
4

となります。
'a' = 1 の件は私はちょっとぱっと見で分からないですね...
うーむ、`'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