

Poiche' nella definizione della funzione contains viene utilizzato
il predicato di eguaglianza, il tipo di contain inferito da Haskell
e'
contains :: Eq a => a -> [a] -> Bool

Nell'inferire il tipo per la funzione cucu Haskell controlla
che l'applicazione
(contains g lg)
sia corretta (il tipo di questa applicazione sara' inferito come
tipo del codominio di cucu.
Il problema e' che sul tipo Giuggiolo non e' definito il predicato
di uguaglianza '==', e quindi il tipo Giuggiolo non appartiene
alla classe Eq.
Per risolvere il problema, e' sufficiente inserire la seguente
definizione di istanza dopo la definizione del tipo di dato Giuggiiolo:

instance Eq Giuggiolo  where
  (Giuggiolo i) == (Giuggiolo j)  =  i==j

