synthesizer-llvm-1.1.0.1: Efficient signal processing using runtime compilation

Safe HaskellNone
LanguageHaskell98

Synthesizer.LLVM.Frame.Stereo

Contents

Description

Re-export functions from Sound.Frame.Stereo and add (orphan) instances for various LLVM type classes. If you want to use the Stereo datatype with synthesizer-llvm we recommend to import this module instead of Sound.Frame.Stereo or Sound.Frame.NumericPrelude.Stereo.

Synopsis

Documentation

data T a #

Instances
Functor T 
Instance details

Defined in Sound.Frame.Stereo

Methods

fmap :: (a -> b) -> T a -> T b #

(<$) :: a -> T b -> T a #

Applicative T 
Instance details

Defined in Sound.Frame.Stereo

Methods

pure :: a -> T a #

(<*>) :: T (a -> b) -> T a -> T b #

liftA2 :: (a -> b -> c) -> T a -> T b -> T c #

(*>) :: T a -> T b -> T b #

(<*) :: T a -> T b -> T a #

Foldable T 
Instance details

Defined in Sound.Frame.Stereo

Methods

fold :: Monoid m => T m -> m #

foldMap :: Monoid m => (a -> m) -> T a -> m #

foldr :: (a -> b -> b) -> b -> T a -> b #

foldr' :: (a -> b -> b) -> b -> T a -> b #

foldl :: (b -> a -> b) -> b -> T a -> b #

foldl' :: (b -> a -> b) -> b -> T a -> b #

foldr1 :: (a -> a -> a) -> T a -> a #

foldl1 :: (a -> a -> a) -> T a -> a #

toList :: T a -> [a] #

null :: T a -> Bool #

length :: T a -> Int #

elem :: Eq a => a -> T a -> Bool #

maximum :: Ord a => T a -> a #

minimum :: Ord a => T a -> a #

sum :: Num a => T a -> a #

product :: Num a => T a -> a #

Traversable T 
Instance details

Defined in Sound.Frame.Stereo

Methods

traverse :: Applicative f => (a -> f b) -> T a -> f (T b) #

sequenceA :: Applicative f => T (f a) -> f (T a) #

mapM :: Monad m => (a -> m b) -> T a -> m (T b) #

sequence :: Monad m => T (m a) -> m (T a) #

MakeGroundArguments f a => MakeGroundArguments f (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

Methods

makeGroundArgs :: f (GroundArguments (T a)) -> T a Source #

Eq a => Eq (T a) 
Instance details

Defined in Sound.Frame.Stereo

Methods

(==) :: T a -> T a -> Bool #

(/=) :: T a -> T a -> Bool #

Show a => Show (T a) 
Instance details

Defined in Sound.Frame.Stereo

Methods

showsPrec :: Int -> T a -> ShowS #

show :: T a -> String #

showList :: [T a] -> ShowS #

Arbitrary a => Arbitrary (T a) 
Instance details

Defined in Sound.Frame.Stereo

Methods

arbitrary :: Gen (T a) #

shrink :: T a -> [T a] #

Storable a => Storable (T a) 
Instance details

Defined in Sound.Frame.Stereo

Methods

sizeOf :: T a -> Int #

alignment :: T a -> Int #

peekElemOff :: Ptr (T a) -> Int -> IO (T a) #

pokeElemOff :: Ptr (T a) -> Int -> T a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (T a) #

pokeByteOff :: Ptr b -> Int -> T a -> IO () #

peek :: Ptr (T a) -> IO (T a) #

poke :: Ptr (T a) -> T a -> IO () #

C a => C (T a) 
Instance details

Defined in Sound.Frame.Stereo

Methods

numberOfChannels :: T a -> Int #

sizeOfElement :: T a -> Int #

C a => C (T a) 
Instance details

Defined in Sound.Sox.Frame

Methods

format :: T a -> T0 #

C l => C (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

pack :: T l -> Struct (T l)

unpack :: Struct (T l) -> T l

C l => C (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Struct (T l) :: Type

Methods

load :: Value (Ptr (Struct (T l))) -> CodeGenFunction r (T l)

store :: T l -> Value (Ptr (Struct (T l))) -> CodeGenFunction r ()

decompose :: Value (Struct (T l)) -> CodeGenFunction r (T l)

compose :: T l -> CodeGenFunction r (Value (Struct (T l)))

C a => C (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Repr (T a) :: Type

Methods

cons :: T a -> T0 (T a)

undef :: T0 (T a)

zero :: T0 (T a)

phi :: BasicBlock -> T0 (T a) -> CodeGenFunction r (T0 (T a))

addPhi :: BasicBlock -> T0 (T a) -> T0 (T a) -> CodeGenFunction r ()

Phi a => Phi (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

phi :: BasicBlock -> T a -> CodeGenFunction r (T a)

addPhi :: BasicBlock -> T a -> T a -> CodeGenFunction r ()

C a => C (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Repr n (T a) :: Type

Methods

cons :: Positive n => Vector n (T a) -> T0 n (T a)

undef :: Positive n => T0 n (T a)

zero :: Positive n => T0 n (T a)

phi :: Positive n => BasicBlock -> T0 n (T a) -> CodeGenFunction r (T0 n (T a))

addPhi :: Positive n => BasicBlock -> T0 n (T a) -> T0 n (T a) -> CodeGenFunction r ()

shuffle :: (Positive n, Positive m) => ConstValue (Vector m Word32) -> T0 n (T a) -> T0 n (T a) -> CodeGenFunction r (T0 m (T a))

extract :: Positive n => Value Word32 -> T0 n (T a) -> CodeGenFunction r (T1 (T a))

insert :: Positive n => Value Word32 -> T0 (T a) -> T1 n (T a) -> CodeGenFunction r (T1 n (T a))

Undefined a => Undefined (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

undef :: T a

Additive a => Additive (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

add :: T0 (T a) -> T0 (T a) -> CodeGenFunction r (T0 (T a))

sub :: T0 (T a) -> T0 (T a) -> CodeGenFunction r (T0 (T a))

neg :: T0 (T a) -> CodeGenFunction r (T0 (T a))

Compose a => Compose (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Composed (T a) :: Type

Methods

compose :: T a -> T0 (Composed (T a))

Decompose p => Decompose (T p) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

decompose :: T p -> T0 (PatternTuple (T p)) -> Decomposed T0 (T p)

Additive a => Additive (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

zero :: T a

add :: T a -> T a -> CodeGenFunction r (T a)

sub :: T a -> T a -> CodeGenFunction r (T a)

neg :: T a -> CodeGenFunction r (T a)

PseudoModule a => PseudoModule (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

scale :: Scalar (T a) -> T a -> CodeGenFunction r (T a)

Select a => Select (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

select :: Value Bool -> T a -> T a -> CodeGenFunction r (T a)

Zero a => Zero (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

zero :: T a

Value h => Value (T h) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type ValueOf (T h) :: Type

Methods

valueOf :: T h -> ValueOf (T h)

C l => C (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

pack :: T l -> Struct (T l)

unpack :: Struct (T l) -> T l

C v => C (T v) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

insert :: Value Word32 -> Element (T v) -> T v -> CodeGenFunction r (T v)

Simple v => Simple (T v) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Element (T v) :: Type

type Size (T v) :: Type

Methods

shuffleMatch :: ConstValue (Vector (Size (T v)) Word32) -> T v -> CodeGenFunction r (T v)

extract :: Value Word32 -> T v -> CodeGenFunction r (Element (T v))

C l => C (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

load :: Value (Ptr (T l)) -> CodeGenFunction r (T0 (T l))

store :: T0 (T l) -> Value (Ptr (T l)) -> CodeGenFunction r ()

(Vector l, C l) => Vector (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

assembleVector :: Positive n => Proxy (T l) -> Vector n (Repr (T l)) -> CodeGenFunction r (Repr n (T l))

disassembleVector :: Positive n => Proxy (T l) -> Repr n (T l) -> CodeGenFunction r (Vector n (Repr (T l)))

Flatten a => Flatten (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type Registers (T a) :: Type #

Methods

flattenCode :: T a -> Compute r (Registers (T a)) #

unfoldCode :: T0 (Registers (T a)) -> T a #

C l => C (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Methods

load :: Value (Ptr (T l)) -> CodeGenFunction r (ValueOf (T l))

store :: ValueOf (T l) -> Value (Ptr (T l)) -> CodeGenFunction r ()

Zero v => Zero (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

Methods

writeZero :: CodeGenFunction r (WriteIterator (WriteIt (T v)) (T v)) Source #

Write v => Write (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

Associated Types

type WriteIt (T v) :: Type Source #

Methods

insert :: Value Word32 -> Element (T v) -> T v -> CodeGenFunction r (T v) Source #

assemble :: [Element (T v)] -> CodeGenFunction r (T v) Source #

writeStart :: CodeGenFunction r (WriteIterator (WriteIt (T v)) (T v)) Source #

writeNext :: Element (T v) -> WriteIterator (WriteIt (T v)) (T v) -> CodeGenFunction r (WriteIterator (WriteIt (T v)) (T v)) Source #

writeStop :: WriteIterator (WriteIt (T v)) (T v) -> CodeGenFunction r (T v) Source #

Read v => Read (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

Associated Types

type Element (T v) :: Type Source #

type ReadIt (T v) :: Type Source #

Methods

extract :: Value Word32 -> T v -> CodeGenFunction r (Element (T v)) Source #

dissect :: T v -> CodeGenFunction r [Element (T v)] Source #

readStart :: T v -> CodeGenFunction r (ReadIterator (ReadIt (T v)) (T v)) Source #

readNext :: ReadIterator (ReadIt (T v)) (T v) -> CodeGenFunction r (Element (T v), ReadIterator (ReadIt (T v)) (T v)) Source #

Sized value => Sized (T value) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

Associated Types

type Size (T value) :: Type Source #

RunArg a => RunArg (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Private.Render

Associated Types

type DSLArg (T a) :: Type Source #

Methods

buildArg :: T0 (T a) (DSLArg (T a))

MakeGuidedArguments a => MakeGuidedArguments (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

Methods

makeGuidedArgs :: Functor f => T a -> f (PatternArguments (T a)) -> GuidedArguments f (T a) Source #

MakeArguments a => MakeArguments (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

Methods

makeArgs :: Functor f => f (T a) -> Arguments f (T a) Source #

Aggregate e mv => Aggregate (T e) (T mv) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

Associated Types

type MultiValuesOf (T e) :: Type

type ExpressionsOf (T mv) :: Type

Methods

bundle :: T e -> CodeGenFunction r (T mv)

dissect :: T mv -> T e

(PseudoRing a, RationalConstant a, C a) => C (Parameter a) (T a) (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

Associated Types

type Input (Parameter a) (T a) :: Type Source #

type Output (Parameter a) (T a) :: Type Source #

Methods

process :: T0 (Parameter a, T a) (T a) Source #

(Vector n a, n ~ D3, PseudoRing a, inp ~ T a, out ~ T a) => C (ParameterMV a) (T inp) (T out) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

Associated Types

type Input (ParameterMV a) (T out) :: Type Source #

type Output (ParameterMV a) (T inp) :: Type Source #

Methods

process :: T0 (ParameterMV a, T inp) (T out) Source #

type Repr n (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Repr n (T a) = T (Repr n a)
type Decomposed f (T pa) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Decomposed f (T pa) = T (Decomposed f pa)
type GuidedArguments f (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

type GuidedArguments f (T a) = T (GuidedArguments f a)
type Arguments f (T a) Source #

Consistent with pair instance. You may use AnyArg or withGuidedArgs to stop descending into the stereo channels.

Instance details

Defined in Synthesizer.LLVM.Causal.Functional

type Arguments f (T a) = T (Arguments f a)
type Struct (T l) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Struct (T l)
type Repr (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Repr (T a) = T (Repr a)
type Composed (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Composed (T a) = T (Composed a)
type PatternTuple (T pa) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type PatternTuple (T pa) = T (PatternTuple pa)
type Scalar (T a) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Scalar (T a) = Scalar a
type ValueOf (T h) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type ValueOf (T h) = T (ValueOf h)
type Element (T v) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Element (T v) = T (Element v)
type Size (T v) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Size (T v) = Size v
type ExpressionsOf (T mv) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type ExpressionsOf (T mv) = T (ExpressionsOf mv)
type MultiValuesOf (T e) 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type MultiValuesOf (T e) = T (MultiValuesOf e)
type Registers (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.Stereo

type Registers (T a) = T (Registers a)
type WriteIt (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

type WriteIt (T v) = T (WriteIt v)
type Element (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

type Element (T v) = T (Element v)
type ReadIt (T v) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

type ReadIt (T v) = T (ReadIt v)
type Size (T value) Source # 
Instance details

Defined in Synthesizer.LLVM.Frame.SerialVector.Class

type Size (T value) = Size value
type DSLArg (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Private.Render

type DSLArg (T a) = T (DSLArg a)
type PatternArguments (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

type GroundArguments (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Functional

type Input (Parameter a) (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

type Input (Parameter a) (T a) = T a
type Input (ParameterMV a) (T out) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

type Input (ParameterMV a) (T out) = T out
type Output (Parameter a) (T a) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

type Output (Parameter a) (T a) = T a
type Output (ParameterMV a) (T inp) Source # 
Instance details

Defined in Synthesizer.LLVM.Causal.Controlled

type Output (ParameterMV a) (T inp) = T inp

cons :: a -> a -> T a #

left :: T a -> a #

right :: T a -> a #

data Channel #

Constructors

Left 
Right 

select :: T a -> Channel -> a #

swap :: T a -> T a #

multiValue :: T (T a) -> T (T a) Source #

unMultiValue :: T (T a) -> T (T a) Source #

consMultiValue :: T a -> T a -> T (T a) Source #

unExpression :: Exp (T a) -> T (Exp a) Source #

multiVector :: T (T n a) -> T n (T a) Source #

unMultiVector :: T n (T a) -> T (T n a) Source #

multiValueSerial :: T (T (T n a)) -> T (T n (T a)) Source #

unMultiValueSerial :: T (T n (T a)) -> T (T (T n a)) Source #

arrowFromMono :: Arrow arrow => arrow a b -> arrow (T a) (T b) #

Run a causal process independently on each stereo channel.

arrowFromMonoControlled :: Arrow arrow => arrow (c, a) b -> arrow (c, T a) (T b) #

arrowFromChannels :: Arrow arrow => arrow a b -> arrow a b -> arrow (T a) (T b) #

interleave :: (T a, T b) -> T (a, b) #

sequence :: Functor f => f (T a) -> T (f a) #

liftApplicative :: Applicative f => (f a -> f b) -> f (T a) -> f (T b) #

Orphan instances

C l => C (T l) Source # 
Instance details

Methods

pack :: T l -> Struct (T l)

unpack :: Struct (T l) -> T l

C l => C (T l) Source # 
Instance details

Associated Types

type Struct (T l) :: Type

Methods

load :: Value (Ptr (Struct (T l))) -> CodeGenFunction r (T l)

store :: T l -> Value (Ptr (Struct (T l))) -> CodeGenFunction r ()

decompose :: Value (Struct (T l)) -> CodeGenFunction r (T l)

compose :: T l -> CodeGenFunction r (Value (Struct (T l)))

C a => C (T a) Source # 
Instance details

Associated Types

type Repr (T a) :: Type

Methods

cons :: T a -> T0 (T a)

undef :: T0 (T a)

zero :: T0 (T a)

phi :: BasicBlock -> T0 (T a) -> CodeGenFunction r (T0 (T a))

addPhi :: BasicBlock -> T0 (T a) -> T0 (T a) -> CodeGenFunction r ()

Phi a => Phi (T a) Source # 
Instance details

Methods

phi :: BasicBlock -> T a -> CodeGenFunction r (T a)

addPhi :: BasicBlock -> T a -> T a -> CodeGenFunction r ()

C a => C (T a) Source # 
Instance details

Associated Types

type Repr n (T a) :: Type

Methods

cons :: Positive n => Vector n (T a) -> T0 n (T a)

undef :: Positive n => T0 n (T a)

zero :: Positive n => T0 n (T a)

phi :: Positive n => BasicBlock -> T0 n (T a) -> CodeGenFunction r (T0 n (T a))

addPhi :: Positive n => BasicBlock -> T0 n (T a) -> T0 n (T a) -> CodeGenFunction r ()

shuffle :: (Positive n, Positive m) => ConstValue (Vector m Word32) -> T0 n (T a) -> T0 n (T a) -> CodeGenFunction r (T0 m (T a))

extract :: Positive n => Value Word32 -> T0 n (T a) -> CodeGenFunction r (T1 (T a))

insert :: Positive n => Value Word32 -> T0 (T a) -> T1 n (T a) -> CodeGenFunction r (T1 n (T a))

Undefined a => Undefined (T a) Source # 
Instance details

Methods

undef :: T a

Additive a => Additive (T a) Source # 
Instance details

Methods

add :: T0 (T a) -> T0 (T a) -> CodeGenFunction r (T0 (T a))

sub :: T0 (T a) -> T0 (T a) -> CodeGenFunction r (T0 (T a))

neg :: T0 (T a) -> CodeGenFunction r (T0 (T a))

Compose a => Compose (T a) Source # 
Instance details

Associated Types

type Composed (T a) :: Type

Methods

compose :: T a -> T0 (Composed (T a))

Decompose p => Decompose (T p) Source # 
Instance details

Methods

decompose :: T p -> T0 (PatternTuple (T p)) -> Decomposed T0 (T p)

Additive a => Additive (T a) Source # 
Instance details

Methods

zero :: T a

add :: T a -> T a -> CodeGenFunction r (T a)

sub :: T a -> T a -> CodeGenFunction r (T a)

neg :: T a -> CodeGenFunction r (T a)

PseudoModule a => PseudoModule (T a) Source # 
Instance details

Methods

scale :: Scalar (T a) -> T a -> CodeGenFunction r (T a)

Select a => Select (T a) Source # 
Instance details

Methods

select :: Value Bool -> T a -> T a -> CodeGenFunction r (T a)

Zero a => Zero (T a) Source # 
Instance details

Methods

zero :: T a

Value h => Value (T h) Source # 
Instance details

Associated Types

type ValueOf (T h) :: Type

Methods

valueOf :: T h -> ValueOf (T h)

C l => C (T l) Source # 
Instance details

Methods

pack :: T l -> Struct (T l)

unpack :: Struct (T l) -> T l

C v => C (T v) Source # 
Instance details

Methods

insert :: Value Word32 -> Element (T v) -> T v -> CodeGenFunction r (T v)

Simple v => Simple (T v) Source # 
Instance details

Associated Types

type Element (T v) :: Type

type Size (T v) :: Type

Methods

shuffleMatch :: ConstValue (Vector (Size (T v)) Word32) -> T v -> CodeGenFunction r (T v)

extract :: Value Word32 -> T v -> CodeGenFunction r (Element (T v))

C l => C (T l) Source # 
Instance details

Methods

load :: Value (Ptr (T l)) -> CodeGenFunction r (T0 (T l))

store :: T0 (T l) -> Value (Ptr (T l)) -> CodeGenFunction r ()

(Vector l, C l) => Vector (T l) Source # 
Instance details

Methods

assembleVector :: Positive n => Proxy (T l) -> Vector n (Repr (T l)) -> CodeGenFunction r (Repr n (T l))

disassembleVector :: Positive n => Proxy (T l) -> Repr n (T l) -> CodeGenFunction r (Vector n (Repr (T l)))

Flatten a => Flatten (T a) Source # 
Instance details

Associated Types

type Registers (T a) :: Type #

Methods

flattenCode :: T a -> Compute r (Registers (T a)) #

unfoldCode :: T0 (Registers (T a)) -> T a #

C l => C (T l) Source # 
Instance details

Methods

load :: Value (Ptr (T l)) -> CodeGenFunction r (ValueOf (T l))

store :: ValueOf (T l) -> Value (Ptr (T l)) -> CodeGenFunction r ()

Aggregate e mv => Aggregate (T e) (T mv) Source # 
Instance details

Associated Types

type MultiValuesOf (T e) :: Type

type ExpressionsOf (T mv) :: Type

Methods

bundle :: T e -> CodeGenFunction r (T mv)

dissect :: T mv -> T e