Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data A
- data A'
- data B
- data B'
- data C
- data C'
- data ExtraX
- data ExtraY
- data D = D A B C
- data D' = D' A' B' C' ExtraX ExtraY
- data AError
- data BError
- data CError
- data ExtraXError
- data ExtraYError
- data DSubError = DSubError (Maybe AError) (Maybe BError) (Maybe CError)
- instance Monoid DSubError
- data DError = DError (Maybe DSubError) (Maybe ExtraXError) (Maybe ExtraYError)
- instance Monoid DError
- tA :: Monad m -> m (Either AError A')
- tB :: Monad m -> m (Either BError B')
- tC :: Monad m -> m (Either CError C')
- getExtraX :: A' -> C' -> Either ExtraXError ExtraX
- getExtraY :: A' -> B' -> Either ExtraYError ExtraY
- tD :: Monad m -> m (Either DError D')
- tD a b c = do
- a <- tA a
- b <- tB b
- c <- tC c
- x <- case (a, c) of
- (Just a', Just c') -> Just $ getExtraX a' c'
- _ -> Nothing
- y <- case (a', b') of
- (Just a', Just b') -> Just $ getExtraY a' b'
- _ -> Nothing
- case (a, b, c, x, y) of
- (Just a', Just b', Just c', Just (Right x'), Just (Right y')) -> pure $ Right (D' a' b' c' x' y')
- _ -> pure $ Left ...
Add Comment
Please, Sign In to add comment