Skip to content

Add a kind synonym: MonadTransformer = (Type -> Type) -> (Type -> Type) #22

@sjshuck

Description

@sjshuck

[original issue 83 by @Icelandjack]

-- The kind of monad transformers. When used, T :: MonadTransformer should serve as
-- an informal indicator that there is a MonadTrans T instance.
type MonadTransformer :: Type
type MonadTransformer = (Type -> Type) -> (Type -> Type)

Which appears all over the place, and simplifies a lot of messy kinds, MonadTrans reads fairly clear here and ComposeT (composition of monad transformers) does as well

type MonadTrans :: MonadTransformer -> Constraint

type ComposeT :: MonadTransformer -> MonadTransformer -> MonadTransformer
newtype ComposeT trans1 trans2 m a = ComposeT (trans1 (trans2 m) a)

From Elevator and others

type    Elevator :: MonadTransformer -> MonadTransformer
newtype Elevator trans m a = Elevator (trans m a)

type ReaderT :: Type -> MonadTransformer

type StateT :: Type -> MonadTransformer

type WriterT :: Type -> MonadTransformer

at very little cost (a single synonym).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions