work-site/content/courses/h4life/h4life-types.hs

62 lines
1.6 KiB
Haskell
Raw Normal View History

2018-09-22 23:40:20 +02:00
{- 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