doc: update `ChangeLog.md`
[haskell/symantic-base.git] / src / Symantic / Semantics / Reader.hs
index 3973251adb9a750c6ea5734a21bde94857c4b65d..f6b16ff6e64c5e8d57ec82778cfe249461b8406a 100644 (file)
@@ -1,50 +1,53 @@
-module Symantic.Reader where
+module Symantic.Semantics.Reader where
 
-import Data.Function ((.), const)
+import Data.Function (const, (.))
 
-import Symantic.Classes hiding (const, (.))
-import Symantic.Derive
+import Symantic.Syntaxes.Classes hiding (const, (.))
+import Symantic.Syntaxes.Derive
 
 -- * Type 'Reader'
+
 -- | An intermediate interpreter exposing an environment.
-newtype Reader r repr a = Reader { unReader :: r -> repr a }
+newtype Reader r sem a = Reader {unReader :: r -> sem a}
 
-type instance Derived (Reader r repr) = repr
-instance LiftDerived (Reader r repr) where
+type instance Derived (Reader r sem) = sem
+instance LiftDerived (Reader r sem) where
   liftDerived = Reader . const
-instance LiftDerived1 (Reader r repr) where
+instance LiftDerived1 (Reader r sem) where
   liftDerived1 f a = Reader (f . unReader a)
-instance LiftDerived2 (Reader r repr) where
+instance LiftDerived2 (Reader r sem) where
   liftDerived2 f a b = Reader (\r -> f (unReader a r) (unReader b r))
-instance LiftDerived3 (Reader r repr) where
+instance LiftDerived3 (Reader r sem) where
   liftDerived3 f a b c = Reader (\r -> f (unReader a r) (unReader b r) (unReader c r))
-instance LiftDerived4 (Reader r repr) where
+instance LiftDerived4 (Reader r sem) where
   liftDerived4 f a b c d = Reader (\r -> f (unReader a r) (unReader b r) (unReader c r) (unReader d r))
 
-instance Abstractable repr => Abstractable (Reader r repr) where
+instance Unabstractable sem => Unabstractable (Reader r sem)
+instance Abstractable sem => Abstractable (Reader r sem) where
   lam f = Reader (\r -> lam ((`unReader` r) . f . liftDerived))
   lam1 f = Reader (\r -> lam1 ((`unReader` r) . f . liftDerived))
-instance Functionable repr => Functionable (Reader r repr)
-instance Anythingable repr => Anythingable (Reader r repr)
-instance Constantable c repr => Constantable c (Reader r repr)
-instance Eitherable repr => Eitherable (Reader r repr)
-instance Equalable repr => Equalable (Reader r repr)
-instance IfThenElseable repr => IfThenElseable (Reader r repr)
--- Using 'Inferable' with a specific @a@ and keeping @repr@ polymorphic
+instance Functionable sem => Functionable (Reader r sem)
+instance Anythingable sem => Anythingable (Reader r sem)
+instance Constantable c sem => Constantable c (Reader r sem)
+instance Eitherable sem => Eitherable (Reader r sem)
+instance Equalable sem => Equalable (Reader r sem)
+instance IfThenElseable sem => IfThenElseable (Reader r sem)
+
+-- Using 'Inferable' with a specific @a@ and keeping @sem@ polymorphic
 -- is more usual; hence commenting this instance that would overlap.
---instance Inferable a repr => Inferable a (Reader r repr)
-instance Listable repr => Listable (Reader r repr)
-instance Maybeable repr => Maybeable (Reader r repr)
-instance IsoFunctor repr => IsoFunctor (Reader r repr)
-instance (ProductFunctor repr, IsoFunctor repr) => ProductFunctor (Reader r repr)
-instance (SumFunctor repr, IsoFunctor repr) => SumFunctor (Reader r repr)
-instance AlternativeFunctor repr => AlternativeFunctor (Reader r repr)
-instance Dicurryable repr => Dicurryable (Reader r repr)
-instance Emptyable repr => Emptyable (Reader r repr)
-instance Semigroupable repr => Semigroupable (Reader r repr)
-instance Optionable repr => Optionable (Reader r repr)
-instance Repeatable repr => Repeatable (Reader r repr)
--- instance Permutable repr => Permutable (Reader r repr)
-instance Routable repr => Routable (Reader r repr)
-instance Voidable repr => Voidable (Reader r repr)
-instance Substractable repr => Substractable (Reader r repr)
+--instance Inferable a sem => Inferable a (Reader r sem)
+instance Listable sem => Listable (Reader r sem)
+instance Maybeable sem => Maybeable (Reader r sem)
+instance IsoFunctor sem => IsoFunctor (Reader r sem)
+instance (ProductFunctor sem, IsoFunctor sem) => ProductFunctor (Reader r sem)
+instance (SumFunctor sem, IsoFunctor sem) => SumFunctor (Reader r sem)
+instance AlternativeFunctor sem => AlternativeFunctor (Reader r sem)
+instance Dicurryable sem => Dicurryable (Reader r sem)
+instance Emptyable sem => Emptyable (Reader r sem)
+instance Semigroupable sem => Semigroupable (Reader r sem)
+instance Optionable sem => Optionable (Reader r sem)
+instance Repeatable sem => Repeatable (Reader r sem)
+
+-- instance Permutable sem => Permutable (Reader r sem)
+instance Voidable sem => Voidable (Reader r sem)
+instance Substractable sem => Substractable (Reader r sem)