>>>>> "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

Reply via email to