Safe Haskell | None |
---|---|
Language | Haskell2010 |
Proarrow.Category.Monoidal.Optic
Synopsis
- class (Monoidal m, CategoryOf k) => MonoidalAction m k where
- type Act (p :: m) (x :: k) :: k
- act :: forall (p :: m) (q :: m) (x :: k) (y :: k). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y
- unitor :: forall (x :: k). Obj x -> Act (Unit :: m) x ~> x
- unitorInv :: forall (x :: k). Obj x -> x ~> Act (Unit :: m) x
- multiplicator :: forall (p :: m) (q :: m) (x :: k). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x
- multiplicatorInv :: forall (p :: m) (q :: m) (x :: k). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x)
- data DayAct (w :: k -> m -> Type) (p :: k1 -> k2 -> Type) (a :: k1) (b :: k2) where
- class (MonoidalAction m c, Monoid a, Ob n) => ModuleObject (a :: m) (n :: c) where
- class (MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d, Profunctor p) => Tambara (w :: PRO m m') (p :: PRO c d) where
- data Optic (w :: PRO m m') (a :: c) (b :: d) (s :: c) (t :: d) where
- opticAsDayAct :: forall {k} {m} c d (w :: PRO k m) (a :: c) (b :: d). (CategoryOf c, CategoryOf d) => Optic w a b :~> DayAct w (Yo a b)
- dayActAsOptic :: forall m c m' d (w :: PRO m m') (a :: c) (b :: d). (MonoidalAction m c, MonoidalAction m' d, Profunctor w) => DayAct w (Yo a b) :~> Optic w a b
- parallel :: forall {k1} {k2} {k3} {k4} {k5} {k6} (w :: PRO k1 k1) (a :: k2) (b :: k3) (s :: k2) (t :: k3) (w' :: PRO k4 k4) (c :: k5) (d :: k6) (u :: k5) (v :: k6). Optic w a b s t -> Optic w' c d u v -> Optic (w :**: w') '(a, c) '(b, d) '(s, u) '(t, v)
- data OPTIC (w :: PRO m m') c d = OPT c d
- type family LCat (p :: OPTIC w c d) :: c where ...
- type family RCat (p :: OPTIC w c d) :: d where ...
- data OpticCat (ab :: OPTIC w c d) (st :: OPTIC w c d) where
- type ProfOptic (w :: PRO m m') (a :: k) (b :: k1) (s :: k) (t :: k1) = forall (p :: PRO k k1). Tambara w p => p a b -> p s t
- type MixedOptic m (a :: k) (b :: k1) (s :: k) (t :: k1) = ProfOptic ((~>) :: CAT m) a b s t
- ex2prof :: forall {m} {m'} {k1} {k2} (w :: PRO m m') (a :: k1) (b :: k2) (s :: k1) (t :: k2). Optic w a b s t -> ProfOptic w a b s t
- prof2ex :: forall {c} {d} m m' (w :: PRO m m') (a :: c) (b :: d) (s :: c) (t :: d). (MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d, Ob a, Ob b) => ProfOptic w a b s t -> Optic w a b s t
- type Lens (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic Type a b s t
- mkLens :: (s -> a) -> (s -> b -> t) -> Lens s t a b
- type Prism (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (COPROD Type) ('COPR a) ('COPR b) ('COPR s) ('COPR t)
- mkPrism :: (s -> Either t a) -> (b -> t) -> Prism s t a b
- type Traversal (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (Type -> Type) a b s t
- traversing :: forall (f :: Type -> Type) a b. Traversable f => Traversal (f a) (f b) a b
- class Monad m => Algebra (m :: Type -> Type) a where
- algebra :: m a -> a
- type AlgebraicLens (m :: Type -> Type) (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (SUBCAT (Algebra m)) a b s t
- mkAlgebraicLens :: forall m s t a b. Monad m => (s -> a) -> (m s -> b -> t) -> AlgebraicLens m s t a b
- newtype Viewing a b s t = Viewing {
- getView :: s -> a
- (^.) :: s -> (Viewing a b a b -> Viewing a b s t) -> a
- data Previewing (a :: COPROD Type) (b :: COPROD Type) (s :: COPROD Type) (t :: COPROD Type) where
- Previewing :: forall s1 a1 b1 t1. {..} -> Previewing ('COPR a1) ('COPR b1) ('COPR s1) ('COPR t1)
- (?.) :: s -> (Previewing ('COPR a) ('COPR b) ('COPR a) ('COPR b) -> Previewing ('COPR a) ('COPR b) ('COPR s) ('COPR t)) -> Maybe a
- newtype Setting a b s t = Setting {
- getSet :: (a -> b) -> s -> t
- (.~) :: (Setting a b a b -> Setting a b s t) -> b -> s -> t
- type KlCat (m :: Type -> Type) = KLEISLI (Star (Prelude m))
- data Updating (a :: k) (b :: KlCat m) s (t :: KlCat m) where
- mupdate :: Monad m => (Updating a ('KL b :: KLEISLI (Star (Prelude m))) a ('KL b :: KLEISLI (Star (Prelude m))) -> Updating a ('KL b :: KLEISLI (Star (Prelude m))) s ('KL t :: KLEISLI (Star (Prelude m)))) -> b -> s -> m t
- newtype Replacing a b s t = Replace {
- getReplace :: (a -> b) -> s -> t
- (%~) :: (Replacing a b a b -> Replacing a b s t) -> (a -> b) -> s -> t
- newtype Classifying (m :: Type -> Type) (a :: k) b s t = Classifying {
- getClassify :: Monad m => m s -> b -> t
- (.?) :: Monad m => (Classifying m a b a b -> Classifying m a b s t) -> b -> m s -> t
Documentation
class (Monoidal m, CategoryOf k) => MonoidalAction m k where Source Comments #
Methods
act :: forall (p :: m) (q :: m) (x :: k) (y :: k). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments #
unitor :: forall (x :: k). Obj x -> Act (Unit :: m) x ~> x Source Comments #
unitorInv :: forall (x :: k). Obj x -> x ~> Act (Unit :: m) x Source Comments #
multiplicator :: forall (p :: m) (q :: m) (x :: k). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments #
multiplicatorInv :: forall (p :: m) (q :: m) (x :: k). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments #
Instances
MonoidalAction Type Type Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Associated Types
Methods act :: (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: Obj x -> Act (Unit :: Type) x ~> x Source Comments # unitorInv :: Obj x -> x ~> Act (Unit :: Type) x Source Comments # multiplicator :: Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
Monad m => MonoidalAction Type (KlCat m) Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall p q (x :: KlCat m) (y :: KlCat m). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: KlCat m). Obj x -> Act (Unit :: Type) x ~> x Source Comments # unitorInv :: forall (x :: KlCat m). Obj x -> x ~> Act (Unit :: Type) x Source Comments # multiplicator :: forall p q (x :: KlCat m). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall p q (x :: KlCat m). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
MonoidalAction Type (COPROD Type) Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall p q (x :: COPROD Type) (y :: COPROD Type). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: COPROD Type). Obj x -> Act (Unit :: Type) x ~> x Source Comments # unitorInv :: forall (x :: COPROD Type). Obj x -> x ~> Act (Unit :: Type) x Source Comments # multiplicator :: forall p q (x :: COPROD Type). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall p q (x :: COPROD Type). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
MonoidalAction (COPROD Type) Type Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall (p :: COPROD Type) (q :: COPROD Type) x y. (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: Obj x -> Act (Unit :: COPROD Type) x ~> x Source Comments # unitorInv :: Obj x -> x ~> Act (Unit :: COPROD Type) x Source Comments # multiplicator :: forall (p :: COPROD Type) (q :: COPROD Type) x. Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: COPROD Type) (q :: COPROD Type) x. Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
MonoidalAction (COPROD Type) (COPROD Type) Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall (p :: COPROD Type) (q :: COPROD Type) (x :: COPROD Type) (y :: COPROD Type). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: COPROD Type). Obj x -> Act (Unit :: COPROD Type) x ~> x Source Comments # unitorInv :: forall (x :: COPROD Type). Obj x -> x ~> Act (Unit :: COPROD Type) x Source Comments # multiplicator :: forall (p :: COPROD Type) (q :: COPROD Type) (x :: COPROD Type). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: COPROD Type) (q :: COPROD Type) (x :: COPROD Type). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
(MonoidalAction m k, Monoidal (SUBCAT ob)) => MonoidalAction (SUBCAT ob) k Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall (p :: SUBCAT ob) (q :: SUBCAT ob) (x :: k) (y :: k). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: k). Obj x -> Act (Unit :: SUBCAT ob) x ~> x Source Comments # unitorInv :: forall (x :: k). Obj x -> x ~> Act (Unit :: SUBCAT ob) x Source Comments # multiplicator :: forall (p :: SUBCAT ob) (q :: SUBCAT ob) (x :: k). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: SUBCAT ob) (q :: SUBCAT ob) (x :: k). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
MonoidalAction (Type -> Type) Type Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Associated Types
Methods act :: forall (p :: Type -> Type) (q :: Type -> Type) x y. (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: Obj x -> Act (Unit :: Type -> Type) x ~> x Source Comments # unitorInv :: Obj x -> x ~> Act (Unit :: Type -> Type) x Source Comments # multiplicator :: forall (p :: Type -> Type) (q :: Type -> Type) x. Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: Type -> Type) (q :: Type -> Type) x. Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
(MonoidalAction m c, MonoidalAction m' d) => MonoidalAction (PRO m m') (PRO c d) Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall (p :: PRO m m') (q :: PRO m m') (x :: PRO c d) (y :: PRO c d). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: PRO c d). Obj x -> Act (Unit :: PRO m m') x ~> x Source Comments # unitorInv :: forall (x :: PRO c d). Obj x -> x ~> Act (Unit :: PRO m m') x Source Comments # multiplicator :: forall (p :: PRO m m') (q :: PRO m m') (x :: PRO c d). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: PRO m m') (q :: PRO m m') (x :: PRO c d). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # | |||||
(MonoidalAction n j, MonoidalAction m k) => MonoidalAction (n, m) (j, k) Source Comments # | |||||
Defined in Proarrow.Category.Monoidal.Optic Methods act :: forall (p :: (n, m)) (q :: (n, m)) (x :: (j, k)) (y :: (j, k)). (p ~> q) -> (x ~> y) -> Act p x ~> Act q y Source Comments # unitor :: forall (x :: (j, k)). Obj x -> Act (Unit :: (n, m)) x ~> x Source Comments # unitorInv :: forall (x :: (j, k)). Obj x -> x ~> Act (Unit :: (n, m)) x Source Comments # multiplicator :: forall (p :: (n, m)) (q :: (n, m)) (x :: (j, k)). Obj p -> Obj q -> Obj x -> Act p (Act q x) ~> Act (p ** q) x Source Comments # multiplicatorInv :: forall (p :: (n, m)) (q :: (n, m)) (x :: (j, k)). Obj p -> Obj q -> Obj x -> Act (p ** q) x ~> Act p (Act q x) Source Comments # |
data DayAct (w :: k -> m -> Type) (p :: k1 -> k2 -> Type) (a :: k1) (b :: k2) where Source Comments #
"Day convolaction"
Constructors
DayAct :: forall {k} {m} {k1} {k2} (w :: k -> m -> Type) (p :: k1 -> k2 -> Type) (a :: k1) (b :: k2) (c :: k) (d :: m) (e :: k1) (f :: k2). (a ~> Act c e) -> w c d -> p e f -> (Act d f ~> b) -> DayAct w p a b |
Instances
(Profunctor w, Profunctor p) => Profunctor (DayAct w p :: c -> d -> Type) Source Comments # | |
class (MonoidalAction m c, Monoid a, Ob n) => ModuleObject (a :: m) (n :: c) where Source Comments #
Instances
(Profunctor p, Tambara w p) => ModuleObject (w :: PRO m m') (p :: PRO c d) Source Comments # | |
class (MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d, Profunctor p) => Tambara (w :: PRO m m') (p :: PRO c d) where Source Comments #
Methods
tambara :: forall (x :: m) (x' :: m') (a :: c) (b :: d). w x x' -> p a b -> p (Act x a) (Act x' b) Source Comments #
Instances
data Optic (w :: PRO m m') (a :: c) (b :: d) (s :: c) (t :: d) where Source Comments #
Constructors
Optic :: forall {c} {d} (a :: c) (b :: d) (s :: c) (t :: d) m m' (w :: PRO m m') (x :: m) (x' :: m'). (Ob a, Ob b) => (s ~> Act x a) -> w x x' -> (Act x' b ~> t) -> Optic w a b s t |
Instances
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => Tambara (w :: PRO m m') (Optic w a b :: c -> d -> Type) Source Comments # | |
(CategoryOf c, CategoryOf d) => Profunctor (Optic w a b :: c -> d -> Type) Source Comments # | |
opticAsDayAct :: forall {k} {m} c d (w :: PRO k m) (a :: c) (b :: d). (CategoryOf c, CategoryOf d) => Optic w a b :~> DayAct w (Yo a b) Source Comments #
dayActAsOptic :: forall m c m' d (w :: PRO m m') (a :: c) (b :: d). (MonoidalAction m c, MonoidalAction m' d, Profunctor w) => DayAct w (Yo a b) :~> Optic w a b Source Comments #
parallel :: forall {k1} {k2} {k3} {k4} {k5} {k6} (w :: PRO k1 k1) (a :: k2) (b :: k3) (s :: k2) (t :: k3) (w' :: PRO k4 k4) (c :: k5) (d :: k6) (u :: k5) (v :: k6). Optic w a b s t -> Optic w' c d u v -> Optic (w :**: w') '(a, c) '(b, d) '(s, u) '(t, v) Source Comments #
data OPTIC (w :: PRO m m') c d Source Comments #
Constructors
OPT c d |
Instances
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => CategoryOf (OPTIC w c d) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic | |
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => Promonad (OpticCat :: OPTIC w c d -> OPTIC w c d -> Type) Source Comments # | |
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => Profunctor (OpticCat :: OPTIC w c d -> OPTIC w c d -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic | |
type (~>) Source Comments # | |
type Ob (a :: OPTIC w c d) Source Comments # | |
data OpticCat (ab :: OPTIC w c d) (st :: OPTIC w c d) where Source Comments #
Constructors
OpticCat :: forall {m} {m'} (w :: PRO m m') c (a :: c) d (b :: d) (s :: c) (t :: d). Optic w a b s t -> OpticCat ('OPT a b :: OPTIC w c d) ('OPT s t :: OPTIC w c d) |
Instances
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => Promonad (OpticCat :: OPTIC w c d -> OPTIC w c d -> Type) Source Comments # | |
(MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d) => Profunctor (OpticCat :: OPTIC w c d -> OPTIC w c d -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic |
type ProfOptic (w :: PRO m m') (a :: k) (b :: k1) (s :: k) (t :: k1) = forall (p :: PRO k k1). Tambara w p => p a b -> p s t Source Comments #
type MixedOptic m (a :: k) (b :: k1) (s :: k) (t :: k1) = ProfOptic ((~>) :: CAT m) a b s t Source Comments #
ex2prof :: forall {m} {m'} {k1} {k2} (w :: PRO m m') (a :: k1) (b :: k2) (s :: k1) (t :: k2). Optic w a b s t -> ProfOptic w a b s t Source Comments #
prof2ex :: forall {c} {d} m m' (w :: PRO m m') (a :: c) (b :: d) (s :: c) (t :: d). (MonoidalProfunctor w, MonoidalAction m c, MonoidalAction m' d, Ob a, Ob b) => ProfOptic w a b s t -> Optic w a b s t Source Comments #
type Prism (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (COPROD Type) ('COPR a) ('COPR b) ('COPR s) ('COPR t) Source Comments #
type Traversal (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (Type -> Type) a b s t Source Comments #
traversing :: forall (f :: Type -> Type) a b. Traversable f => Traversal (f a) (f b) a b Source Comments #
class Monad m => Algebra (m :: Type -> Type) a where Source Comments #
Instances
type AlgebraicLens (m :: Type -> Type) (s :: k) (t :: k1) (a :: k) (b :: k1) = MixedOptic (SUBCAT (Algebra m)) a b s t Source Comments #
mkAlgebraicLens :: forall m s t a b. Monad m => (s -> a) -> (m s -> b -> t) -> AlgebraicLens m s t a b Source Comments #
data Previewing (a :: COPROD Type) (b :: COPROD Type) (s :: COPROD Type) (t :: COPROD Type) where Source Comments #
Constructors
Previewing | |
Fields
|
Instances
Tambara (->) (Previewing a b :: COPROD Type -> COPROD Type -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic | |
Tambara (Coprod :: COPROD Type -> COPROD Type -> Type) (Previewing a b :: COPROD Type -> COPROD Type -> Type) Source Comments # | |
Profunctor (Previewing a b :: COPROD Type -> COPROD Type -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic Methods dimap :: forall (c :: COPROD Type) (a0 :: COPROD Type) (b0 :: COPROD Type) (d :: COPROD Type). (c ~> a0) -> (b0 ~> d) -> Previewing a b a0 b0 -> Previewing a b c d Source Comments # (\\) :: forall (a0 :: COPROD Type) (b0 :: COPROD Type) r. ((Ob a0, Ob b0) => r) -> Previewing a b a0 b0 -> r Source Comments # |
(?.) :: s -> (Previewing ('COPR a) ('COPR b) ('COPR a) ('COPR b) -> Previewing ('COPR a) ('COPR b) ('COPR s) ('COPR t)) -> Maybe a infixl 8 Source Comments #
data Updating (a :: k) (b :: KlCat m) s (t :: KlCat m) where Source Comments #
Constructors
Update | |
mupdate :: Monad m => (Updating a ('KL b :: KLEISLI (Star (Prelude m))) a ('KL b :: KLEISLI (Star (Prelude m))) -> Updating a ('KL b :: KLEISLI (Star (Prelude m))) s ('KL t :: KLEISLI (Star (Prelude m)))) -> b -> s -> m t Source Comments #
newtype Replacing a b s t Source Comments #
Constructors
Replace | |
Fields
|
Instances
Tambara (->) (Replacing a b :: Type -> Type -> Type) Source Comments # | |
Profunctor (Replacing a b :: Type -> Type -> Type) Source Comments # | |
Tambara (Coprod :: COPROD Type -> COPROD Type -> Type) (Replacing a b :: Type -> Type -> Type) Source Comments # | |
Tambara (Nat :: (Type -> Type) -> (Type -> Type) -> Type) (Replacing a b :: Type -> Type -> Type) Source Comments # | |
newtype Classifying (m :: Type -> Type) (a :: k) b s t Source Comments #
Constructors
Classifying | |
Fields
|
Instances
Monad m => Profunctor (Classifying m a b :: Type -> Type -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic Methods dimap :: (c ~> a0) -> (b0 ~> d) -> Classifying m a b a0 b0 -> Classifying m a b c d Source Comments # (\\) :: ((Ob a0, Ob b0) => r) -> Classifying m a b a0 b0 -> r Source Comments # | |
Monad m => Tambara (Sub :: SUBCAT (Algebra m) -> SUBCAT (Algebra m) -> Type) (Classifying m a b :: Type -> Type -> Type) Source Comments # | |
Defined in Proarrow.Category.Monoidal.Optic |
(.?) :: Monad m => (Classifying m a b a b -> Classifying m a b s t) -> b -> m s -> t infixl 8 Source Comments #