haskell / haskell/transformers
Alternative instance for ContT
- Dominant language
- Haskell
- Stars
- 5
- Forks
- 10
- Avg merge
- 2h 21m
- Merged PRs (30d)
- 1
Description
[original issue 69 by dfranke]
instance (Monoid r, Applicative m) => Alternative (ContT r m) where
empty = ContT $ const (pure mempty)
(ContT f) <|> (ContT g) = ContT $ \c -> liftA2 (<>) (f c) (g c)
Some ways this can be useful:
You're using
ContTto implement a backtracking search.risMaybe (First Result))for someResult :: *.a <|> bthen means "tryathen tryb".You have a function
inferType :: Expr a -> (a -> Type) -> TypewhereExpr arepresents an AST containing free variables ina, and(a -> Type)is an environment which maps free variables to their type.Typehas a monoid instance wherememptyis the type of bottom and(<>)is unification; you form aCont Type aby way ofcont (inferType e). Then(<|>)will lift(<>)from working in the empty environment to working in arbitrary ones.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.