{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Validity.Types
( CanFail(..)
) where
class CanFail f where
hasFailed :: f a -> Bool
resultIfSucceeded :: f a -> Maybe a
instance CanFail Maybe where
hasFailed :: Maybe a -> Bool
hasFailed Nothing = Bool
True
hasFailed _ = Bool
False
resultIfSucceeded :: Maybe a -> Maybe a
resultIfSucceeded Nothing = Maybe a
forall a. Maybe a
Nothing
resultIfSucceeded (Just r :: a
r) = a -> Maybe a
forall a. a -> Maybe a
Just a
r
instance CanFail (Either e) where
hasFailed :: Either e a -> Bool
hasFailed (Left _) = Bool
True
hasFailed _ = Bool
False
resultIfSucceeded :: Either e a -> Maybe a
resultIfSucceeded (Left _) = Maybe a
forall a. Maybe a
Nothing
resultIfSucceeded (Right r :: a
r) = a -> Maybe a
forall a. a -> Maybe a
Just a
r