lorentz-0.12.1: EDSL for the Michelson Language
Safe HaskellNone
LanguageHaskell2010

Lorentz.Zip

Description

Stack zipping.

This module provides functions for flattening stacks into tuples.

Also here we define an instance which turns any instruction, not only lambdas, into a valid value.

Synopsis

Documentation

class KnownIsoT (ZippedStack s) => ZipInstr (s :: [Type]) where Source #

Zipping stack into tuple and back.

Associated Types

type ZippedStack s :: Type Source #

A type which contains the whole stack zipped.

Methods

zipInstrTyped :: Instr (ToTs s) '[ToT (ZippedStack s)] Source #

Fold given stack into single value in typed Michelson.

unzipInstrTyped :: Instr '[ToT (ZippedStack s)] (ToTs s) Source #

Unfold given stack from a single value in typed Michelson.

Instances

Instances details
ZipInstr ('[] :: [Type]) Source # 
Instance details

Defined in Lorentz.Zip

Associated Types

type ZippedStack '[] Source #

Methods

zipInstrTyped :: Instr (ToTs '[]) '[ToT (ZippedStack '[])] Source #

unzipInstrTyped :: Instr '[ToT (ZippedStack '[])] (ToTs '[]) Source #

(ZipInstr (b ': s), KnownIsoT a) => ZipInstr (a ': (b ': s)) Source #

Such definition seems the only possible one we can support efficiently.

Instance details

Defined in Lorentz.Zip

Associated Types

type ZippedStack (a ': (b ': s)) Source #

Methods

zipInstrTyped :: Instr (ToTs (a ': (b ': s))) '[ToT (ZippedStack (a ': (b ': s)))] Source #

unzipInstrTyped :: Instr '[ToT (ZippedStack (a ': (b ': s)))] (ToTs (a ': (b ': s))) Source #

KnownIsoT a => ZipInstr '[a] Source # 
Instance details

Defined in Lorentz.Zip

Associated Types

type ZippedStack '[a] Source #

Methods

zipInstrTyped :: Instr (ToTs '[a]) '[ToT (ZippedStack '[a])] Source #

unzipInstrTyped :: Instr '[ToT (ZippedStack '[a])] (ToTs '[a]) Source #

zipInstr :: forall s. ZipInstr s => s :-> '[ZippedStack s] Source #

Fold given stack into single value.

unzipInstr :: forall s. ZipInstr s => '[ZippedStack s] :-> s Source #

Unfold given stack from a single value.

type ZipInstrs ss = Each '[ZipInstr] ss Source #

Require several stacks to comply ZipInstr constraint.

zippingStack :: ZipInstrs [inp, out] => (inp :-> out) -> Lambda (ZippedStack inp) (ZippedStack out) Source #

Flatten both ends of instruction stack.

unzippingStack :: ZipInstrs [inp, out] => Lambda (ZippedStack inp) (ZippedStack out) -> inp :-> out Source #

Unflatten both ends of instruction stack.

Orphan instances

(WellTypedToT (ZippedStack inp), WellTypedToT (ZippedStack out), ZipInstr inp, ZipInstr out) => IsoValue (inp :-> out) Source # 
Instance details

Associated Types

type ToT (inp :-> out) :: T #

Methods

toVal :: (inp :-> out) -> Value (ToT (inp :-> out)) #

fromVal :: Value (ToT (inp :-> out)) -> inp :-> out #

(HasAnnotation (ZippedStack i), HasAnnotation (ZippedStack o)) => HasAnnotation (i :-> o) Source # 
Instance details