62 lines
1.6 KiB
Haskell
62 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
|