Files
book-exercises/Haskell-book/13/Person.hs

35 lines
1019 B
Haskell

module Person where
type Name = String
type Age = Integer
data Person = Person Name Age deriving Show
data PersonInvalid = NameEmpty
| AgeTooLow
| PersonInvalidUnknown String
deriving (Eq, Show)
mkPerson :: Name -> Age -> Either PersonInvalid Person
mkPerson name age
| name /= "" && age > 0 = Right $ Person name age
| name == "" = Left NameEmpty
| not (age > 0) = Left AgeTooLow
| otherwise =
Left $ PersonInvalidUnknown $
"Name was: " ++ show name ++ " Age was: " ++ show age
showPerson :: Either PersonInvalid Person -> String
showPerson (Left NameEmpty) = "Name is empty"
showPerson (Left AgeTooLow) = "Age is too low"
showPerson (Left (PersonInvalidUnknown e)) = e
showPerson (Right p) = "Yay! Successfully got a person: " ++ (show p)
gimmePerson :: IO ()
gimmePerson = do
putStr "Enter your name: "
name <- getLine
putStr "Enter your age: "
age <- getLine
putStrLn $ showPerson $ mkPerson name (read age)