Subscribed unsubscribe Subscribe Subscribe

seqの謎

Haskell

正格評価するためのseqがよくわからない.Preludeに定義されているらしいのでGHC-6.4.1*1のPrelude.hs*2を見てみると次のように定義されている.

seq :: a -> b -> b
seq _ y = y

これはいったいどういうことか.このような定義のseq'を自分で定義しても当然正格評価はされない.

(1 `div` 0) `seq` 0  => *** Exception: divide by zero
(1 `div` 0) `seq'` 0 => 0

Web上にあるいくつかのPrelude.hsではseqはプリミティブな関数として定義されているので納得できるが,このGHC-6.4.1はどういうことなのか?

参考リンク

*1:最新の6.4.2でも同じようだ

*2:/libraries/base/Prelude.hs