output-blocks-0.5.0.1
Safe HaskellNone
LanguageHaskell2010

Control.OutputCapable.Blocks.Generic

Description

This module provides common skeletons for creating multilingual output. Provided interfaces can be used to generate simultaneous multilingual output as well as output which can be rendered in different Languages (when the specific Language is provided)

Synopsis

Documentation

class (forall (g :: Type -> Type). Functor g => Functor (t g)) => FunctorTrans (t :: (Type -> Type) -> Type -> Type) where Source #

The class of functor transformers.

Lifting a functor to the stacked functor.

Methods

lift :: Functor f => f a -> t f a Source #

Lift a computation from the argument functor to the constructed functor.

Instances

Instances details
FunctorTrans (GenericLangM l) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

Methods

lift :: Functor f => f a -> GenericLangM l f a Source #

Monad for translations

newtype GenericLangM l (m :: Type -> Type) a Source #

Constructors

LangM 

Fields

Instances

Instances details
FunctorTrans (GenericLangM l) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

Methods

lift :: Functor f => f a -> GenericLangM l f a Source #

Applicative m => Applicative (GenericLangM l m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

Methods

pure :: a -> GenericLangM l m a #

(<*>) :: GenericLangM l m (a -> b) -> GenericLangM l m a -> GenericLangM l m b #

liftA2 :: (a -> b -> c) -> GenericLangM l m a -> GenericLangM l m b -> GenericLangM l m c #

(*>) :: GenericLangM l m a -> GenericLangM l m b -> GenericLangM l m b #

(<*) :: GenericLangM l m a -> GenericLangM l m b -> GenericLangM l m a #

Functor m => Functor (GenericLangM l m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

Methods

fmap :: (a -> b) -> GenericLangM l m a -> GenericLangM l m b #

(<$) :: a -> GenericLangM l m b -> GenericLangM l m a #

newtype GenericReportT l o (m :: Type -> Type) r Source #

Constructors

Report 

Fields

Instances

Instances details
l ~ Language => GenericOutputCapable l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

Methods

assertion :: Bool -> GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

image :: FilePath -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

images :: (k -> String) -> (a -> FilePath) -> Map k a -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

paragraph :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

refuse :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

text :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

enumerateM :: (a -> GenericLangM l (GenericReportT l (IO ()) IO) ()) -> [(a, GenericLangM l (GenericReportT l (IO ()) IO) ())] -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

itemizeM :: [GenericLangM l (GenericReportT l (IO ()) IO) ()] -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

indent :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

latex :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

folded :: Bool -> (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

code :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

translatedCode :: (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

translated :: (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

(Bounded language, Enum language, Monad m, Ord language) => GenericOutputCapable language (GenericReportT language (GenericOutput language element) m) Source #

OutputCapable instances for GenericOutput, allowing for free conversion between ADT and interface.

Instance details

Defined in Control.OutputCapable.Blocks.Generic.Type

Methods

assertion :: Bool -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

image :: FilePath -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

images :: (k -> String) -> (a -> FilePath) -> Map k a -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

paragraph :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

refuse :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

text :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

enumerateM :: (a -> GenericLangM language (GenericReportT language (GenericOutput language element) m) ()) -> [(a, GenericLangM language (GenericReportT language (GenericOutput language element) m) ())] -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

itemizeM :: [GenericLangM language (GenericReportT language (GenericOutput language element) m) ()] -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

indent :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

latex :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

folded :: Bool -> (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

code :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

translatedCode :: (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

translated :: (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

l ~ Language => RunnableOutputCapable l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

Associated Types

type RunMonad l (GenericReportT l (IO ()) IO) 
Instance details

Defined in Control.OutputCapable.Blocks

type RunMonad l (GenericReportT l (IO ()) IO) = IO
type Output l (GenericReportT l (IO ()) IO) 
Instance details

Defined in Control.OutputCapable.Blocks

type Output l (GenericReportT l (IO ()) IO) = IO ()

Methods

runLangM :: GenericLangM l (GenericReportT l (IO ()) IO) a -> RunMonad l (GenericReportT l (IO ()) IO) (Maybe a, l -> Output l (GenericReportT l (IO ()) IO)) Source #

MonadTrans (GenericReportT l o) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

lift :: Monad m => m a -> GenericReportT l o m a #

MonadIO m => MonadIO (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

liftIO :: IO a -> GenericReportT l o m a #

Monad m => Alternative (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

empty :: GenericReportT l o m a #

(<|>) :: GenericReportT l o m a -> GenericReportT l o m a -> GenericReportT l o m a #

some :: GenericReportT l o m a -> GenericReportT l o m [a] #

many :: GenericReportT l o m a -> GenericReportT l o m [a] #

Monad m => Applicative (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

pure :: a -> GenericReportT l o m a #

(<*>) :: GenericReportT l o m (a -> b) -> GenericReportT l o m a -> GenericReportT l o m b #

liftA2 :: (a -> b -> c) -> GenericReportT l o m a -> GenericReportT l o m b -> GenericReportT l o m c #

(*>) :: GenericReportT l o m a -> GenericReportT l o m b -> GenericReportT l o m b #

(<*) :: GenericReportT l o m a -> GenericReportT l o m b -> GenericReportT l o m a #

Functor m => Functor (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

fmap :: (a -> b) -> GenericReportT l o m a -> GenericReportT l o m b #

(<$) :: a -> GenericReportT l o m b -> GenericReportT l o m a #

Monad m => Monad (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

(>>=) :: GenericReportT l o m a -> (a -> GenericReportT l o m b) -> GenericReportT l o m b #

(>>) :: GenericReportT l o m a -> GenericReportT l o m b -> GenericReportT l o m b #

return :: a -> GenericReportT l o m a #

MonadCatch m => MonadCatch (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

catch :: (HasCallStack, Exception e) => GenericReportT l o m a -> (e -> GenericReportT l o m a) -> GenericReportT l o m a #

MonadThrow m => MonadThrow (GenericReportT l o m) Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Report.Generic

Methods

throwM :: (HasCallStack, Exception e) => e -> GenericReportT l o m a #

type Output l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

type Output l (GenericReportT l (IO ()) IO) = IO ()
type RunMonad l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

type RunMonad l (GenericReportT l (IO ()) IO) = IO

Output monad

class (Applicative m, Ord l) => GenericOutputCapable l (m :: Type -> Type) where Source #

Methods

assertion :: Bool -> GenericLangM l m () -> GenericLangM l m () Source #

for assertions, i.e. expected behaviour is explanation (and abortion on False)

image :: FilePath -> GenericLangM l m () Source #

for printing a single image from file

images :: (k -> String) -> (a -> FilePath) -> Map k a -> GenericLangM l m () Source #

for printing multiple images using the given map

paragraph :: GenericLangM l m () -> GenericLangM l m () Source #

for a complete paragraph

refuse :: GenericLangM l m () -> GenericLangM l m () Source #

should abort at once

text :: String -> GenericLangM l m () Source #

for displaying text

enumerateM :: (a -> GenericLangM l m ()) -> [(a, GenericLangM l m ())] -> GenericLangM l m () Source #

for an enumerated sequence of elements

itemizeM :: [GenericLangM l m ()] -> GenericLangM l m () Source #

for an unenumerated sequence of elements

indent :: GenericLangM l m () -> GenericLangM l m () Source #

for indentation

latex :: String -> GenericLangM l m () Source #

for LaTeX-Math code (i.e. without surrounding $)

folded :: Bool -> (l -> String) -> GenericLangM l m () -> GenericLangM l m () Source #

for minimisable output with a default state (open/closed) and title

code :: String -> GenericLangM l m () Source #

for fixed width fonts (i.e. typewriter style)

translatedCode :: (l -> String) -> GenericLangM l m () Source #

same as code, but with different translations

translated :: (l -> String) -> GenericLangM l m () Source #

for displaying text with translations

Instances

Instances details
Ord l => GenericOutputCapable l Maybe Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

l ~ Language => GenericOutputCapable l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

Methods

assertion :: Bool -> GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

image :: FilePath -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

images :: (k -> String) -> (a -> FilePath) -> Map k a -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

paragraph :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

refuse :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

text :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

enumerateM :: (a -> GenericLangM l (GenericReportT l (IO ()) IO) ()) -> [(a, GenericLangM l (GenericReportT l (IO ()) IO) ())] -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

itemizeM :: [GenericLangM l (GenericReportT l (IO ()) IO) ()] -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

indent :: GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

latex :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

folded :: Bool -> (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

code :: String -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

translatedCode :: (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

translated :: (l -> String) -> GenericLangM l (GenericReportT l (IO ()) IO) () Source #

(Bounded language, Enum language, Monad m, Ord language) => GenericOutputCapable language (GenericReportT language (GenericOutput language element) m) Source #

OutputCapable instances for GenericOutput, allowing for free conversion between ADT and interface.

Instance details

Defined in Control.OutputCapable.Blocks.Generic.Type

Methods

assertion :: Bool -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

image :: FilePath -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

images :: (k -> String) -> (a -> FilePath) -> Map k a -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

paragraph :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

refuse :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

text :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

enumerateM :: (a -> GenericLangM language (GenericReportT language (GenericOutput language element) m) ()) -> [(a, GenericLangM language (GenericReportT language (GenericOutput language element) m) ())] -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

itemizeM :: [GenericLangM language (GenericReportT language (GenericOutput language element) m) ()] -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

indent :: GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

latex :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

folded :: Bool -> (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

code :: String -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

translatedCode :: (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

translated :: (language -> String) -> GenericLangM language (GenericReportT language (GenericOutput language element) m) () Source #

class (GenericOutputCapable l m, Monad (RunMonad l m)) => RunnableOutputCapable l (m :: Type -> Type) where Source #

Associated Types

type RunMonad l (m :: Type -> Type) :: Type -> Type Source #

the monad handling multilingual output

type Output l (m :: Type -> Type) Source #

Methods

runLangM :: GenericLangM l m a -> RunMonad l m (Maybe a, l -> Output l m) Source #

Instances

Instances details
Ord l => RunnableOutputCapable l Maybe Source # 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

Associated Types

type RunMonad l Maybe 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

type Output l Maybe 
Instance details

Defined in Control.OutputCapable.Blocks.Generic

type Output l Maybe = ()
l ~ Language => RunnableOutputCapable l (GenericReportT l (IO ()) IO) Source # 
Instance details

Defined in Control.OutputCapable.Blocks

Associated Types

type RunMonad l (GenericReportT l (IO ()) IO) 
Instance details

Defined in Control.OutputCapable.Blocks

type RunMonad l (GenericReportT l (IO ()) IO) = IO
type Output l (GenericReportT l (IO ()) IO) 
Instance details

Defined in Control.OutputCapable.Blocks

type Output l (GenericReportT l (IO ()) IO) = IO ()

Methods

runLangM :: GenericLangM l (GenericReportT l (IO ()) IO) a -> RunMonad l (GenericReportT l (IO ()) IO) (Maybe a, l -> Output l (GenericReportT l (IO ()) IO)) Source #

abortWith :: forall (m :: Type -> Type) o l. Monad m => o -> GenericLangM l (GenericReportT l o m) () Source #

alignOutput :: forall (m :: Type -> Type) o l a. Monad m => ([o] -> o) -> GenericLangM l (GenericReportT l o m) a -> GenericLangM l (GenericReportT l o m) () Source #

combineReports :: forall (m :: Type -> Type) o l a. Monad m => ([[o]] -> o) -> [GenericLangM l (GenericReportT l o m) a] -> GenericLangM l (GenericReportT l o m) () Source #

Combines the output of the list of given reports using the provided function. Output is provided for all reports up to including the first failing report.

combineTwoReports :: forall (m :: Type -> Type) o l a b. Monad m => ([o] -> [o] -> o) -> GenericLangM l (GenericReportT l o m) a -> GenericLangM l (GenericReportT l o m) b -> GenericLangM l (GenericReportT l o m) () Source #

Combines the output of the two given reports using the provided functions.

If the execution aborts on the first report the second report is treated as if has not produced any output.

format :: forall (m :: Type -> Type) o l. Monad m => o -> GenericLangM l (GenericReportT l o m) () Source #

recoverFrom :: forall (m :: Type -> Type) l. Alternative m => GenericLangM l m () -> GenericLangM l m () Source #

recoverWith :: forall (m :: Type -> Type) a l b. Alternative m => a -> GenericLangM l m b -> GenericLangM l m (Either a b) Source #

toAbort :: forall (m :: Type -> Type) l o a b. Monad m => GenericLangM l (GenericReportT l o m) a -> GenericLangM l (GenericReportT l o m) b Source #

Translation

mapLangM :: (m a -> m b) -> GenericLangM l m a -> GenericLangM l m b Source #

Helper functions

($=<<) :: Monad m => (a -> GenericLangM l m b) -> m a -> GenericLangM l m b infixr 0 Source #

($>>) :: forall (m :: Type -> Type) l a b. Monad m => GenericLangM l m a -> GenericLangM l m b -> GenericLangM l m b infixr 0 Source #

($>>=) :: forall (m :: Type -> Type) l a b. Monad m => GenericLangM l m a -> (a -> GenericLangM l m b) -> GenericLangM l m b infixr 0 Source #

collapsed :: forall language (m :: Type -> Type) a1. GenericOutputCapable language m => Bool -> State (Map language String) a1 -> GenericLangM language m () -> GenericLangM language m () Source #

evalLangM :: forall l (m :: Type -> Type) a. RunnableOutputCapable l m => GenericLangM l m a -> RunMonad l m (Maybe a) Source #

execLangM :: forall l (m :: Type -> Type) a. RunnableOutputCapable l m => GenericLangM l m a -> RunMonad l m (l -> Output l m) Source #

runLangMReport :: Functor m => o -> (o -> o -> o) -> GenericLangM l (GenericReportT l o m) a -> m (Maybe a, l -> o) Source #

Provided a neutral element and a function to combine generated output this function will evaluate GenericLangM and combine the output.

A specific output can be rendered when a language is provided to the returned function.

runLangMReportMultiLang :: Functor m => o -> (o -> o -> o) -> ((l -> o) -> o) -> GenericLangM l (GenericReportT l o m) a -> m (Maybe a, o) Source #

Provided a neutral element, a function to combine generated output, and a function to remap translations into output this function will evaluate GenericLangM and combine the output.

The provided output unifies multilingual output as one. This could for instance be with local definitions of translated parts.

translate :: forall language (m :: Type -> Type) a. GenericOutputCapable language m => State (Map language String) a -> GenericLangM language m () Source #

translateCode :: forall language (m :: Type -> Type) a. GenericOutputCapable language m => State (Map language String) a -> GenericLangM language m () Source #

translations :: State (Map language a1) a2 -> Map language a1 Source #

withLang :: forall l (m :: Type -> Type) b a. (RunnableOutputCapable l m, Output l m ~ RunMonad l m b) => GenericLangM l m a -> l -> RunMonad l m (Maybe a) Source #