@@ -3,3 +3,17 @@ module Providers
33public
44data Provider a = Provide a | Error String
55
6+-- instances
7+instance Functor Provider where
8+ map f (Provide a) = Provide (f a)
9+ map f (Error err) = Error err
10+
11+instance Applicative Provider where
12+ (Provide f) <$> (Provide x) = Provide (f x)
13+ (Provide f) <$> (Error err) = Error err
14+ (Error err) <$> _ = Error err
15+ pure = Provide
16+
17+instance Monad Provider where
18+ (Provide x) >>= f = f x
19+ (Error err) >>= _ = Error err