データ型を定義してみる


data Sex = Male | Female deriving (Eq, Read, Show)

data Person = P { name :: String, sex :: Sex , address :: String , age :: Int}
deriving (Eq,Read,Show)

p :: Person
p = P { name ="taro", sex = Male , address = "Chiba", age =20}

p2 :: Person
p2 = P "hanako" Female "Tokyo" 18

p3 :: Person
p3 = p {name = "saburo",age=22} -- p の一部を変更したもの

showPerson (P {name =n, sex = s, address =adr, age=age}) =
"name=" ++ n ++ " sex=" ++ show s ++" address=" ++ adr ++ " age=" ++show age

main = mapM_ (\x -> putStrLn $ showPerson x) [p,p2,p3]

$ ghci
GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> :load data.hs
[1 of 1] Compiling Main ( data.hs, interpreted )
Ok, modules loaded: Main.
*Main> :info name
data Person = P {name :: String, ...}
-- Defined at data.hs:3:18-21
*Main> :info P
data Person
= P {name :: String, sex :: Sex, address :: String, age :: Int}
-- Defined at data.hs:3:14

*Main> p
P {name = "taro", sex = Male, address = "Chiba", age = 20}
*Main> name p
"taro"
*Main> sex p
Male
*Main> address p
"Chiba"
*Main> :main
name=taro sex=Male address=Chiba age=20
name=hanako sex=Female address=Tokyo age=18
name=saburo sex=Male address=Chiba age=22