lifting functions to tuples?
oleg at pobox.com
oleg at pobox.com
Tue Nov 18 17:56:19 EST 2003
Abraham Egnor wrote:
> The classic way to write a lift function for tuples is, of course:
> liftTup f (a, b) = (f a, f b)
> which has a type of (a -> b) -> (a, a) -> (b, b). I've been wondering if
> it would be possible to write a function that doesn't require the types in
> the tuple to be the same, just that the types in the second tuple are the
> result of applying the type transformation implied in the function to be
> lifted to the types in the first tuple.
Well, it is possible in Haskell. It works even in Hugs!
{-# OPTIONS -fglasgow-exts -fallow-undecidable-instances #-}
class Funnable a b | a->b where
f:: a -> b
instance Funnable Bool Int where
f = fromEnum
instance Funnable Char Float where
f = fromRational . toRational . fromEnum
class LP a b c d where
liftf:: (a, b) -> (c, d)
instance (Funnable a c, Funnable b d) => LP a b c d where
liftf (a,b) = (f a, f b)
Main> liftf (True,'z')
(1,122.0)
More information about the Haskell
mailing list