Hatena::ブログ(Diary)

Hatena’s Kitchen RSSフィード

2009-02-03 まだ首が痛い

Haskellのdata宣言の"!"マーク

| 00:09 |  Haskellのdata宣言の"!"マークを含むブックマーク

Real World Haskellのp.417ぐらいで、いきなり

data Regex = Regex !(ForeignPtr PCRE) !ByteString deriving (Eq, Ord, Show)

みたいなコードが出てきて、この"!"はなんぞと思って調べたのでメモ

ひょっとしたら、p.417までのどこかで説明されているのかも知らないけど全然頭に残ってなかった。

結論としては、

"!"がついてるフィールドは正格評価(strict evaluation)

になるらしい。

data Foo = Foo !Int deriving Show

main = let f = Foo (1 `div` 0) in f `seq` print "OK"

このコードの"Foo !Int"の部分の"!"があるとruntime errorになるけど、"!"をはずすと何も起こらない。

なるほど。