Advertisement
Guest User

Untitled

a guest
Nov 5th, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. newtype AnyMay a = AnyMay (Maybe a) deriving (Functor, Eq)
  2. newtype AllMay a = AllMay (Maybe a) deriving (Functor, Eq)
  3.  
  4. newtype First a = First a deriving (Functor, Eq)
  5. newtype Last a = Last a deriving (Functor, Eq)
  6.  
  7. instance Semigroup (First a) where
  8.   (<>) = const
  9. instance Semigroup (Last a) where
  10.   (<>) = const id
  11.  
  12. instance Semigroup a => Semigroup (AnyMay a) where
  13.   l <> AnyMay Nothing = l
  14.   AnyMay Nothing <> r = r
  15.   AnyMay (Just a) <> AnyMay (Just b) = AnyMay (Just (a <> b))
  16.  
  17. instance Semigroup a => Semigroup (AllMay a) where
  18.   _ <> AllMay Nothing = AllMay Nothing
  19.   AllMay Nothing <> _ = AllMay Nothing
  20.   AllMay (Just a) <> AllMay (Just b) = AllMay (Just (a <> b))
  21.  
  22.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement