[email protected]
[Top] [All Lists]

[Haskell-cafe] lawless instances of Functor

Subject: [Haskell-cafe] lawless instances of Functor
From: Paul Brauner
Date: Mon, 4 Jan 2010 23:14:53 +0100

I'm trying to get a deep feeling of Functors (and then pointed Functors,
Applicative Functors, etc.). To this end, I try to find lawless
instances of Functor that satisfy one law but not the other.

I've found one instance that satisfies fmap (f.g) = fmap f . fmap g
but not fmap id = id:

data Foo a = A | B

instance Functor Foo where
  fmap f A = B
  fmap f B = B

-- violates law 1
fmap id A = B

-- respects law 2
fmap (f . g) A = (fmap f . fmap g) A = B
fmap (f . g) B = (fmap f . fmap g) B = B

But I can't come up with an example that satifies law 1 and not law 2.
I'm beginning to think this isn't possible but I didn't read anything
saying so, neither do I manage to prove it.

I'm sure someone knows :)

Haskell-Cafe mailing list
[email protected]

<Prev in Thread] Current Thread [Next in Thread>