packages feed

idris-0.9.11: libs/base/Providers.idr

module Providers

public
data Provider a = Provide a | Error String

-- instances
instance Functor Provider where
  map f (Provide a) = Provide (f a)
  map f (Error err) = Error err

instance Applicative Provider where
  (Provide f) <$> (Provide x) = Provide (f x)
  (Provide f) <$> (Error err) = Error err
  (Error err) <$> _ = Error err
  pure = Provide

instance Monad Provider where
  (Provide x) >>= f = f x
  (Error err) >>= _ = Error err