It can be even worse:

data X a b = X (X b a -> b)

Here (X a) is certainly a functor, but the implementation must also act on "a" contravariantly:

mapX :: (a -> a') -> X a' b -> X a b
mapX f (X h) = X $ h . fmap f
instance Functor (X a) where fmap f (X h) = X $ f . h . mapX f

On 5 Jun 2008, at 12:39, Thomas Davie wrote:

Even deriving an instance of Functor seems rather implausable, what should it do for

data Wierd a b = Nil | A a (Wierd a b) | B b (Wierd a b)

Should fmap's function argument operate on 'a's, 'b's, or both?

Bob

On 5 Jun 2008, at 10:28, Miguel Mitrofanov wrote:

Well, it's certainly not possible for "filter", at least, not without additional hints to the compiler. For example, consider this type:

data Weird a = A | B a (Weird a) (Weird a)

filter p A = A
filter p (B x w1 w2) | p x = B x (filter p w1) (filter p w2)
                   | otherwise = ?????

On 5 Jun 2008, at 12:03, Cetin Sert wrote:

Hi ^_^,

Let's say we have the following data type and functions:
data Tab a =      (:↺:)

         |     a :↓:   Tab a
         | Tab a :↙↘: (Tab a,Tab a)
         deriving (Eq, Show, Read)

map f (:↺:)          = (:↺:)
map f (a :↓: t)      = f a :↓: map f t
map f (h :↙↘: (l,r)) = map f h :↙↘: (map f l, map f r)


filter p (:↺:)          = (:↺:)
filter p (a :↓: t)      | p a       = filter p t
                      | otherwise = a :↓: filter p t
filter p (h :↙↘: (l,r)) = filter p h :↙↘: (filter p l, filter p r)

is it possible to automatically derive map and filter?
data Tab a =      (:↺:)
         |     a :↓:   Tab a
         | Tab a :↙↘: (Tab a,Tab a)
         deriving (Eq, Show, Read, Map, Filter)

If not, do you think it might be nice to have something like this in the future?

Best Regards,
Cetin Sert
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to