Continuem el problema Haskell — Cua (1). En aquest problema tenim les cues representades en la forma
cua = Queue [2,8,5] [4,7]
Es demana el codi de diverses funcions i instanciacions. Seguiu el format dels exemples que es mostren als exemples.
Feu que Queue sigui instància de la classe
Functor. Per això implementeu la funció fmap que,
donada una funció de tipus p -> q i un Queue
d’elements de tipus p, retorna un Queue de tipus
q resultant d’aplicar la funció a tots els elements de la
cua.
Feu una funció
translation :: Num b => b -> Queue b -> Queue b
que aplica una translació a tots els punts d’una cua (que serà el segon
paràmetre).
Feu que Queue sigui instància de la classe Monad. Per a resoldre aquest apartat, pot ser útil fer una operació que faci la unió de dues cues del mateix tipus.
Feu, utilitzant la notació do, una funció
kfilter :: (p -> Bool) -> Queue p -> Queue p que
selecciona tots els elements d’una cua que satisfan una propietat
donada.
Les dues funcions valen 50 punts.
Input
let c = push 3 (push 2 (push 1 create)) translation (-2) c
Output
Queue [] [1,0,-1]
Input
let c = push 3 (push 2 (push 1 create)) kfilter (>1) c
Output
Queue [2,3] []