algebraic-classes-0.2.1: Conversions between algebraic classes and F-algebras.

Safe HaskellNone






class Traversable f => AlgebraSignature f whereSource

Associated Types

type Class f :: * -> ConstraintSource

The class for which f is the signature.


evaluate :: Class f b => f b -> bSource

Translate the operations of the signature to method calls of the class.

class Algebra f a whereSource


algebra :: AlgebraSignature f => f a -> aSource

An algebra f a -> a corresponds to an instance of a of the class Class f. In some cases, for example for tuple types, you can give an algebra generically for every signature:

 instance (Class f m, Class f n) => Algebra f (m, n) where
   algebra fmn = (evaluate (fmap fst fmn), evaluate (fmap snd fmn))


Algebra f () 
Class f b => Algebra f (STM b) 
Class f b => Algebra f (Maybe b) 
Class f b => Algebra f (IO b) 
(Monoid m, Class f b) => Algebra f (Const m b) 
Class f b => Algebra f (Either a b) 
Class f b => Algebra f (a -> b) 

algebraA :: (Applicative g, Class f b, AlgebraSignature f) => f (g b) -> g bSource

If you just want to applicatively lift existing instances, you can use this default implementation of algebra.