, compareNameComponent
) where
+import Control.Applicative
import Control.Monad
import Data.Function
import Data.List
(Bad _) `mplus` x = x
x@(Ok _) `mplus` _ = x
+instance Applicative Result where
+ pure = Ok
+ (Bad f) <*> _ = Bad f
+ _ <*> (Bad x) = Bad x
+ (Ok f) <*> (Ok x) = Ok $ f x
+
-- | Simple checker for whether a 'Result' is OK.
isOk :: Result a -> Bool
isOk (Ok _) = True