{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Syd.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 Maybe a
Nothing = Bool
True
hasFailed Maybe a
_ = Bool
False
resultIfSucceeded :: Maybe a -> Maybe a
resultIfSucceeded Maybe a
Nothing = Maybe a
forall a. Maybe a
Nothing
resultIfSucceeded (Just 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 e
_) = Bool
True
hasFailed Either e a
_ = Bool
False
resultIfSucceeded :: Either e a -> Maybe a
resultIfSucceeded (Left e
_) = Maybe a
forall a. Maybe a
Nothing
resultIfSucceeded (Right a
r) = a -> Maybe a
forall a. a -> Maybe a
Just a
r