HaskellでtoString
* JavaでいうtoString の作り方がわからない
* 異なるクラスで同名のフィールドが定義できない
- 2008-01-26 - hoge1e3の日記
と書いてあったけども、showはいろんなオブジェクト?にあるよなぁと思って試してみたけどうまく動かなかったのでLingrで聞いたらできた。
http://www.lingr.com/room/haskell_hackathon_2008/archives/2008/01/28#msg-24671377
class ToStringable a where toString :: a -> String data Pair = Pair {car::Pair, cdr::Pair} | Null | Value Int instance ToStringable Pair where toString (Pair x y) = "(" ++ toString x ++ " . " ++ toString y ++ ")" toString Null = "()" toString (Value x) = show x main = putStrLn $ toString $ (Pair (Value 1) (Pair (Value 2) Null)) -- (1 . (2 . ()))
全般的に、「型クラス」「型」「データ構築子」の区別が自分の中であいまいであることがわかった。Intは型、NumやShowは型クラス、Pairは型とデータ構築子の両方、NullとValueはデータ構築子。