[Haskell-cafe] automatically deriving Map and Filter on datatypes etc.

Miguel Mitrofanov miguelimo38 at yandex.ru
Thu Jun 5 04:28:02 EDT 2008


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
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list