Tenim definit un tipus per guardar duracions temporals de la forma següent:
data Temps = Temps Int Int
on el primer enter correspon a les hores i el segon als minuts. Se suposa que les hores es troben entre 0 i 99 i els minuts entre 0 i 59.
També tenim arbres genèrics definits així:
data Arbre a = Arbre a [Arbre a]
Feu que Temps sigui instància de la classe
Show tot fent que els dos nombres es mostrin sempre amb
dues xifres amb un ’:’ al mig.
ghci> Temps 1 5
01:05
ghci> Temps 2 10
02:10Implementeu una funció
suma :: Temps -> Temps -> Temps que, donats dos
temps, en retorni la seva suma.
ghci> suma (Temps 1 5) (Temps 2 10)
03:15
ghci> suma (Temps 1 35) (Temps 2 40)
04:15Implementeu una funció sumes :: [Temps] -> Temps
sense recursivitat i en notació "point free (sense paràmetres) que,
donada una llista de temps, retorni la suma dels seus elements.
ghci> sumes [Temps 1 35,Temps 2 40]
04:15
ghci> sumes [Temps 1 35,Temps 2 40,Temps 9 10]
13:25Implementeu una funció
sumesArbre :: Arbre Temps -> Temps que, donat un arbre
general de duracions, calculi la suma dels seus temps. Per exemple:
ghci> let f = Arbre (Temps 2 40) [Arbre (Temps 1 1) []]
ghci> let t = (Arbre (Temps 1 35) [f, Arbre (Temps 9 10) []])
ghci> sumesArbre f
03:41
ghci> sumesArbre t
14:26Feu un programa implementant una acció main :: IO ()
que:
obtingui una llista de temps separats per espais de l’entrada estàndar (en una única linia),
parsegi l’entrada obtenint una llista de temps,
en calculi la seva suma i,
mostri el resultat per la sortida estàndar.
Input
1:05 2:10 9:10
Output
12:25