{-# OPTIONS_GHC -fno-warn-unrecognised-pragmas #-}
module Darcs.Patch.Effect ( Effect(..) ) where
import Prelude ()
import Darcs.Prelude
import Darcs.Patch.Prim.Class ( PrimOf )
import Darcs.Patch.Witnesses.Ordered
( FL(..), RL(..), reverseFL, reverseRL
, concatFL, concatRL, mapFL_FL, mapRL_RL
)
class Effect p where
effect :: p wX wY -> FL (PrimOf p) wX wY
effect = RL (PrimOf p) wX wY -> FL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> FL a wX wZ
reverseRL (RL (PrimOf p) wX wY -> FL (PrimOf p) wX wY)
-> (p wX wY -> RL (PrimOf p) wX wY)
-> p wX wY
-> FL (PrimOf p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p wX wY -> RL (PrimOf p) wX wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> RL (PrimOf p) wX wY
effectRL
effectRL :: p wX wY -> RL (PrimOf p) wX wY
effectRL = FL (PrimOf p) wX wY -> RL (PrimOf p) wX wY
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> RL a wX wZ
reverseFL (FL (PrimOf p) wX wY -> RL (PrimOf p) wX wY)
-> (p wX wY -> FL (PrimOf p) wX wY)
-> p wX wY
-> RL (PrimOf p) wX wY
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p wX wY -> FL (PrimOf p) wX wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect
{-# MINIMAL effect | effectRL #-}
instance Effect p => Effect (FL p) where
effect :: FL p wX wY -> FL (PrimOf (FL p)) wX wY
effect p :: FL p wX wY
p = FL (FL (PrimOf p)) wX wY -> FL (PrimOf (FL p)) wX wY
forall (a :: * -> * -> *) wX wZ. FL (FL a) wX wZ -> FL a wX wZ
concatFL (FL (FL (PrimOf p)) wX wY -> FL (PrimOf (FL p)) wX wY)
-> FL (FL (PrimOf p)) wX wY -> FL (PrimOf (FL p)) wX wY
forall a b. (a -> b) -> a -> b
$ (forall wW wY. p wW wY -> FL (PrimOf p) wW wY)
-> FL p wX wY -> FL (FL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. p wW wY -> FL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect FL p wX wY
p
effectRL :: FL p wX wY -> RL (PrimOf (FL p)) wX wY
effectRL p :: FL p wX wY
p = RL (RL (PrimOf p)) wX wY -> RL (PrimOf (FL p)) wX wY
forall (a :: * -> * -> *) wX wZ. RL (RL a) wX wZ -> RL a wX wZ
concatRL (RL (RL (PrimOf p)) wX wY -> RL (PrimOf (FL p)) wX wY)
-> RL (RL (PrimOf p)) wX wY -> RL (PrimOf (FL p)) wX wY
forall a b. (a -> b) -> a -> b
$ (forall wW wY. p wW wY -> RL (PrimOf p) wW wY)
-> RL p wX wY -> RL (RL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall wW wY. p wW wY -> RL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> RL (PrimOf p) wX wY
effectRL (RL p wX wY -> RL (RL (PrimOf p)) wX wY)
-> RL p wX wY -> RL (RL (PrimOf p)) wX wY
forall a b. (a -> b) -> a -> b
$ FL p wX wY -> RL p wX wY
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> RL a wX wZ
reverseFL FL p wX wY
p
instance Effect p => Effect (RL p) where
effect :: RL p wX wY -> FL (PrimOf (RL p)) wX wY
effect p :: RL p wX wY
p = FL (FL (PrimOf p)) wX wY -> FL (PrimOf (RL p)) wX wY
forall (a :: * -> * -> *) wX wZ. FL (FL a) wX wZ -> FL a wX wZ
concatFL (FL (FL (PrimOf p)) wX wY -> FL (PrimOf (RL p)) wX wY)
-> FL (FL (PrimOf p)) wX wY -> FL (PrimOf (RL p)) wX wY
forall a b. (a -> b) -> a -> b
$ (forall wW wY. p wW wY -> FL (PrimOf p) wW wY)
-> FL p wX wY -> FL (FL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> FL a wX wZ -> FL b wX wZ
mapFL_FL forall wW wY. p wW wY -> FL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> FL (PrimOf p) wX wY
effect (FL p wX wY -> FL (FL (PrimOf p)) wX wY)
-> FL p wX wY -> FL (FL (PrimOf p)) wX wY
forall a b. (a -> b) -> a -> b
$ RL p wX wY -> FL p wX wY
forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> FL a wX wZ
reverseRL RL p wX wY
p
effectRL :: RL p wX wY -> RL (PrimOf (RL p)) wX wY
effectRL p :: RL p wX wY
p = RL (RL (PrimOf p)) wX wY -> RL (PrimOf (RL p)) wX wY
forall (a :: * -> * -> *) wX wZ. RL (RL a) wX wZ -> RL a wX wZ
concatRL (RL (RL (PrimOf p)) wX wY -> RL (PrimOf (RL p)) wX wY)
-> RL (RL (PrimOf p)) wX wY -> RL (PrimOf (RL p)) wX wY
forall a b. (a -> b) -> a -> b
$ (forall wW wY. p wW wY -> RL (PrimOf p) wW wY)
-> RL p wX wY -> RL (RL (PrimOf p)) wX wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall wW wY. p wW wY -> RL (PrimOf p) wW wY
forall (p :: * -> * -> *) wX wY.
Effect p =>
p wX wY -> RL (PrimOf p) wX wY
effectRL RL p wX wY
p