Guest User

Untitled

a guest
Mar 20th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. data A
  2. data A'
  3.  
  4. data B
  5. data B'
  6.  
  7. data C
  8. data C'
  9.  
  10. data ExtraX
  11. data ExtraY
  12.  
  13. data D = D A B C
  14. data D' = D' A' B' C' ExtraX ExtraY
  15.  
  16. data AError
  17. data BError
  18. data CError
  19.  
  20. data ExtraXError
  21. data ExtraYError
  22.  
  23. data DSubError = DSubError (Maybe AError) (Maybe BError) (Maybe CError)
  24. instance Monoid DSubError
  25.  
  26. data DError = DError (Maybe DSubError) (Maybe ExtraXError) (Maybe ExtraYError)
  27. instance Monoid DError
  28.  
  29. tA :: Monad m -> m (Either AError A')
  30. tB :: Monad m -> m (Either BError B')
  31. tC :: Monad m -> m (Either CError C')
  32.  
  33. getExtraX :: A' -> C' -> Either ExtraXError ExtraX
  34. getExtraY :: A' -> B' -> Either ExtraYError ExtraY
  35.  
  36. tD :: Monad m -> m (Either DError D')
  37. tD a b c = do
  38. a <- tA a
  39. b <- tB b
  40. c <- tC c
  41. x <- case (a, c) of
  42. (Just a', Just c') -> Just $ getExtraX a' c'
  43. _ -> Nothing
  44. y <- case (a', b') of
  45. (Just a', Just b') -> Just $ getExtraY a' b'
  46. _ -> Nothing
  47. case (a, b, c, x, y) of
  48. (Just a', Just b', Just c', Just (Right x'), Just (Right y')) -> pure $ Right (D' a' b' c' x' y')
  49. _ -> pure $ Left ...
Add Comment
Please, Sign In to add comment