Paul Govereau wrote: [snip]
instance AbSyn Constraint where subst e n constr = let sub = subst e n -- :: AbSyn a => a -> a in case constr of Zero expr -> Zero (sub expr) AndL cs -> AndL (sub cs)
It looks sort of like sub is being monomorphised -- or something?
I think you just hit the monomorphism restriction. For the details, see: http://www.haskell.org/onlinereport/decls.html - Sect. 4.5.5 http://haskell.org/hawiki/MonomorphismRestriction Possible solutions for your specific case are: 1) add an explicit type signature for sub let sub :: AbSyn a => a -> a sub = subst e n in ... 2) eta-expand sub, so its definition becomes a function binding let sub c = subst e n c in ... Regards, Roberto Zunino.