Re: [Haskell-cafe] Questions about the Functor class and it's use in "Data types à la carte"

Felipe Lessa felipe.lessa at
Fri Dec 14 16:18:51 EST 2007

On Dec 14, 2007 6:37 PM, Benja Fallenstein <benja.fallenstein at> wrote:
> such that the following two properties hold:
>     * F(idX) = idF(X) for every object X in C
>     * F(g . f) = F(g) . F(f) for all morphisms f:X -> Y and g:Y -> Z."

Should we write

instance Functor Val where
  fmap = undefined

Would those properties be satisfied? Of course,

fmap (g . f) == _|_ == fmap g . fmap f,


fmap id x == _|_ =/= x == id x.

As my understanding of the relationship between bottoms and
non-bottoms isn't that great, could anyone tell me if the above
instance is sound (i.e. satisfy the expected properties)? If it is
not, the implementation "fmap f = id" is really the only one sound,



More information about the Haskell-Cafe mailing list