toString と show と
HaskellでtoString - 西尾泰和のはてなダイアリー にて,この前の 「Haskell で toStringを定義する方法 」を書いてくれた.
確かにtoString は実装できるのだけど,すでに show という手段があるのだから,
- 通常はデフォルトのshow を使って
- ある一部のクラスについてはshow をカスタマイズしたい
という書き方ができるとなおよい(JavaはtoStringをオーバーライドすればできる),これがどうもうまくいかない
data Bar = Bar Int data Foo = Foo Bar deriving Show show Foo b = "" ++ show b ++" " main = show (Foo (Bar 5))
こんなエラーがでる.
Ambiguous occurrence `show' It could refer to either `show', defined at C:/eclipse/workspace/haskell/src/Test.hs:5:3 or `show', imported from Prelude
ようは show の定義が2つあるからどっちを採用すればわからん,ということらしい.
よりspecific なほうを採用する,というOO な考えはやっぱり関数型言語にはないのだろうか.