User-defined Types

Hamler supports algebraic data types (ADTs):

  1. -- type synonym
  2. type Name = String
  3. "Miles" :: Name
  4. "Miles" :: String
  5. newtype UInt8 = UInt8 Integer
  6. 1 :: Integer
  7. UInt8 1 :: UInt8
  8. -- sum datatype
  9. data Color = Red | Green | Blue
  10. Blue :: Color
  11. -- product datatype
  12. data Pair = Pair Integer Integer
  13. Pair 3 4 :: Pair
  14. -- record product datatype
  15. data Person = Person {
  16. name :: String
  17. age :: Integer
  18. address :: String
  19. }
  20. Person {name = "Miles", age = 50, address = "NY"} :: Person
  21. -- generic datatype (maybe for example)
  22. data Maybe a = Just a | None
  23. data Result val err = Ok val | Error err
  24. -- recursive datatype
  25. data Tree = Leaf Integer | Node Tree Tree