playground/haskell/unsorted/typeclass-as-param.hs

25 lines
497 B
Haskell

mergefn :: (Maybe a1) -> (Maybe a1) -> Maybe a1
mergefn a b =
case a of {
Just _ -> a;
Nothing -> b}
{-
- *Main> mergefn (Just 3) Nothing
- Just 3
- *Main> mergefn Nothing (Just 3)
- Just 3
-}
merge :: (Functor a2) -> (Applicative a2) -> ((Maybe a1) -> (Maybe a1) ->
Maybe a1) -> a2 -> a2 -> a2
merge ftor appl _ a b =
ap ftor appl (fmap ftor mergefn a) b
{-
mergefn :: (Maybe a1) -> (Maybe a1) -> Maybe a1
mergefn a b =
case a of {
Just _ -> a;
Nothing -> b}
-}