This seems to make using tuples of various sizes easier (and can
also be applied to non-tuples). I think it more closely matches
how I describe something in spoken language (when I say "second"
its obvious what that means for any tuple size):
{-# OPTIONS_GHC -fglasgow-exts #-}
module Main where
class Second a b | a -> b where
snd :: a -> b
instance Second (a,b) b where
snd (a,b) = b
instance Second (a,b,c) b where
snd (a,b,c) = b
instance Second (a,b,c,d) b where
snd (a,b,c,d) = b
instance Second (a,b,c,d,e) b where
snd (a,b,c,d,e) = b
instance Second (a,b,c,d,e,f) b where
snd (a,b,c,d,e,f) = b
instance Second [a] a where
snd [] = error "don't got none"
snd (x:y:xs) = y
main = do
print $ snd (1,2)
print $ snd (8,9,3)
print $ snd (9,8,9,3)
print $ snd (4,9,8,9,3)
print $ snd [3,4]
Tim Newsham
http://www.thenewsh.com/~newsham/
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe