61 lines
1.6 KiB
Haskell
61 lines
1.6 KiB
Haskell
{- types.hs
|
||
|
||
This file contains some of the examples on types to be shown in the
|
||
second class of the course "Haskell for Life", by Sergiu Ivanov
|
||
(sivanov@lacl.fr):
|
||
|
||
http://lacl.fr/~sivanov/doku.php?id=en:haskell_for_life
|
||
|
||
This file is distributed under the Creative Commons Attribution Alone
|
||
licence.-}
|
||
|
||
data BookInfo = Book Int String [String]
|
||
deriving (Show)
|
||
|
||
data Coordinates = Cartesian2D Double Double | Polar2D Double Double
|
||
deriving (Show)
|
||
|
||
printCoordinate :: Coordinates -> String
|
||
printCoordinate (Cartesian2D x y) = "x=" ++ show x ++ ",y=" ++ show y
|
||
printCoordinate (Polar2D ρ φ) = "ρ=" ++ show ρ ++ ",φ=" ++ show φ
|
||
|
||
data Pair a = Pair a a
|
||
deriving (Show)
|
||
|
||
|
||
-- | Returns 'True' if the given 'Maybe' contains 'Nothing'.
|
||
myIsNothing :: Maybe a -> Bool
|
||
myIsNothing Nothing = True
|
||
myIsNothing (Just _) = False
|
||
|
||
-- | Extracts the contents of a 'Maybe' (unpacks it).
|
||
myFromJust :: Maybe a -> a
|
||
myFromJust (Just x) = x
|
||
|
||
|
||
data List a = Cons a (List a) | Nil
|
||
deriving (Show)
|
||
|
||
-- | Converts an instance of 'List' to a normal Haskell list.
|
||
fromMyList :: List a -> [a]
|
||
fromMyList (Cons x xs) = x:fromMyList xs
|
||
fromMyList Nil = []
|
||
|
||
-- | Converts a normal Haskell list to an instance of 'List'.
|
||
toMyList :: [a] -> List a
|
||
toMyList (x:xs) = Cons x (toMyList xs)
|
||
toMyList [] = Nil
|
||
|
||
|
||
data FunnyList a = a :/ (FunnyList a) | Void
|
||
deriving Show
|
||
|
||
|
||
data Tree a = Node a (Tree a) (Tree a) | Empty
|
||
deriving (Show, Read)
|
||
|
||
-- | Returns a list of the values contained in the leaves of a tree.
|
||
fruit :: Tree a -> [a]
|
||
fruit Empty = []
|
||
fruit (Node x Empty Empty) = [x]
|
||
fruit (Node _ l r) = fruit l ++ fruit r
|