代数的データ型その9

共用体スタイルについて。

data PTItem = Pram Int | Text String

このように複数のデータコンストラクタのうちのいずれかを使うという書き方ができます。どのデータコンストラクタを使ったかの判別はパターンマッチで行えます。

data PTItem = Param Int | Text String

isText :: PTItem -> Bool
isText (Text _) = True
isText (Param _) = False

text :: PTItem -> String
text (Text s) = s
text (Param _) = ""

param :: PTItem -> Int
param (Text _) = 0
param (Param p) = p

val1 = Param 1
val2 = Text "Val2"

main = do print $ isText val1 -- False
          print $ isText val2 -- True
          print $ text val1   -- ""
          print $ param val1  -- 1
          print $ text val2   -- "Val2"
          print $ param val2  -- 0

これだけだとあまり使い道はなさそうですが、次の再帰的な型を覚えるといろいろ応用が利きそうです。再帰的な型については次回。