type Maybe a { Just a | Nothing } fromMaybe : a (Maybe a) -- a =: [ { case | Just -> dip(drop) | Nothing -> } ] join : (Maybe (Maybe a)) -- (Maybe a) =: [ { case | Just -> | Nothing -> Nothing } ] isJust : (Maybe a) -- Bool =: [ { case | Just -> drop True | Nothing -> False } ] isNothing : (Maybe a) -- Bool =: [ { case | Nothing -> True | Just -> drop False } ]