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

62 lines
1.6 KiB
Haskell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{- 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