>>>>> "Mattias" == Mattias Bengtsson <[EMAIL PROTECTED]> writes:
Mattias> On Thu, 2007-02-01 at 21:01 -1000, Tim Newsham wrote: >> instance Second [a] a where snd [] = error "don't got none" snd >> (x:y:xs) = y Mattias> Would'nt that instance mean this: snd [] produces error Mattias> snd [x] gives [] No. It is non-exhaustive pattern. In fact this is needed: > instance Second [a] a where > snd (_:y:_) = y > snd _ = error "don't got none" Mattias> I'd implement it something like this (if this works?): Mattias> instance Second [a] (Maybe a) where snd [] = Nothing snd Mattias> [x] = Nothing snd (x:y:xs) = Just y Well, we also can define: > class SafeSecond a b | a -> b where > ssnd :: (Monad m) => a -> m b > instance SafeSecond [a] a where > ssnd (_:y:_) = return y > ssnd _ = fail "don't got none" > main = do > print $ (ssnd [1, 2, 3] :: Maybe Int) > print $ (ssnd [1] :: Maybe Int) -- WBR, Max Vasin. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe