1 module Symantic.Compta.Input.Chart where
3 import Control.Applicative (Applicative(..))
4 import Control.Monad (Monad(..))
5 import Data.Foldable (foldr)
6 import Data.Functor (Functor)
7 import Data.Monoid (Monoid(..))
8 import Data.Ord (Ord(..))
9 import Data.Semigroup (Semigroup(..))
10 import Prelude (error)
11 import qualified Control.Monad.Trans.Writer as MT
12 import qualified GHC.Exts as GHC
14 import Symantic.Compta.Lang.Rebindable
15 import Symantic.Compta.Lang
16 import Symantic.Compta.Calc.Chart
19 -- | A 'Monad' to construct a 'Chart'.
20 newtype ChartM k v m a = ChartM { unChartM ::
21 MT.WriterT (v, Chart k v) m a
22 } deriving newtype (Functor, Applicative, Monad)
24 runChartM :: Monad m => ChartM k v m a -> m (Chart k v)
26 (_a, (_v, ch)) <- MT.runWriterT (unChartM chM)
29 instance (Ord k, Monoid v, Monad m) => Semigroup (ChartM k v m a) where
30 (<>) = (Control.Monad.>>)
31 instance (Ord k, Monoid v, Monad m, Monoid a) => Monoid (ChartM k v m a) where
32 mempty = return mempty
38 ) => GHC.IsList (ChartM k v m a) where
39 type Item (ChartM k v m a) = ChartM k v m a
41 fromListN _n = mconcat