traq
Safe HaskellSafe-Inferred
LanguageHaskell2010

Traq.CQPL.Syntax

Synopsis

Syntax

data MetaParam sizeT #

Compile-time constant parameters

Constructors

MetaName String 
MetaSize sizeT 
MetaValue Integer 

Instances

Instances details
Read sizeT => Read (MetaParam sizeT) # 
Instance details

Defined in Traq.ProtoLang.Syntax

Show sizeT => Show (MetaParam sizeT) # 
Instance details

Defined in Traq.ProtoLang.Syntax

Methods

showsPrec :: Int -> MetaParam sizeT -> ShowS #

show :: MetaParam sizeT -> String #

showList :: [MetaParam sizeT] -> ShowS #

Eq sizeT => Eq (MetaParam sizeT) # 
Instance details

Defined in Traq.ProtoLang.Syntax

Methods

(==) :: MetaParam sizeT -> MetaParam sizeT -> Bool #

(/=) :: MetaParam sizeT -> MetaParam sizeT -> Bool #

Show sizeT => ToCodeString (MetaParam sizeT) # 
Instance details

Defined in Traq.ProtoLang.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => MetaParam sizeT -> m () #

Unitary Fragment

class HasAdjoint a where #

Methods

adjoint :: a -> a #

Instances

Instances details
HasAdjoint (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

adjoint :: UStmt sizeT -> UStmt sizeT #

HasAdjoint (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

adjoint :: Unitary sizeT -> Unitary sizeT #

data Unitary sizeT #

Unitary operators in CQPL

Constructors

Toffoli 
CNOT 
XGate 
HGate 
COPY 
SWAP 
LoadData Ident 
Refl0

reflect about |0>_T

RevEmbedU [Ident] (BasicExpr sizeT) 
DistrU (DistrExpr sizeT) 
Controlled (Unitary sizeT) 
Adjoint (Unitary sizeT) 

Instances

Instances details
Read sizeT => Read (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

readsPrec :: Int -> ReadS (Unitary sizeT) #

readList :: ReadS [Unitary sizeT] #

readPrec :: ReadPrec (Unitary sizeT) #

readListPrec :: ReadPrec [Unitary sizeT] #

Show sizeT => Show (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> Unitary sizeT -> ShowS #

show :: Unitary sizeT -> String #

showList :: [Unitary sizeT] -> ShowS #

Eq sizeT => Eq (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: Unitary sizeT -> Unitary sizeT -> Bool #

(/=) :: Unitary sizeT -> Unitary sizeT -> Bool #

HasAdjoint (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

adjoint :: Unitary sizeT -> Unitary sizeT #

Show sizeT => ToCodeString (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => Unitary sizeT -> m () #

type SizeType (Unitary sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (Unitary sizeT) = sizeT

data UStmt sizeT #

Unitary Statement

Constructors

USkipS 
UnitaryS 

Fields

UCallS 

Fields

USeqS [UStmt sizeT] 
UCommentS String 
URepeatS 

Fields

UForInRangeS 

Fields

UWithComputedS 

Fields

Instances

Instances details
Read sizeT => Read (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

readsPrec :: Int -> ReadS (UStmt sizeT) #

readList :: ReadS [UStmt sizeT] #

readPrec :: ReadPrec (UStmt sizeT) #

readListPrec :: ReadPrec [UStmt sizeT] #

Show sizeT => Show (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> UStmt sizeT -> ShowS #

show :: UStmt sizeT -> String #

showList :: [UStmt sizeT] -> ShowS #

Eq sizeT => Eq (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: UStmt sizeT -> UStmt sizeT -> Bool #

(/=) :: UStmt sizeT -> UStmt sizeT -> Bool #

HasAdjoint (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

adjoint :: UStmt sizeT -> UStmt sizeT #

Show sizeT => ToCodeString (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => UStmt sizeT -> m () #

type SizeType (UStmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (UStmt sizeT) = sizeT

Classical Fragment

data FunctionCall #

Type of function call

data Stmt sizeT #

CQ Statement

Constructors

SkipS 
CommentS String 
AssignS 

Fields

RandomS 

Fields

RandomDynS 

Fields

CallS 

Fields

SeqS [Stmt sizeT] 
IfThenElseS 

Fields

RepeatS 

Fields

WhileK 

Fields

WhileKWithCondExpr 

Fields

ForInArray 

Fields

Instances

Instances details
Read sizeT => Read (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

readsPrec :: Int -> ReadS (Stmt sizeT) #

readList :: ReadS [Stmt sizeT] #

readPrec :: ReadPrec (Stmt sizeT) #

readListPrec :: ReadPrec [Stmt sizeT] #

Show sizeT => Show (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> Stmt sizeT -> ShowS #

show :: Stmt sizeT -> String #

showList :: [Stmt sizeT] -> ShowS #

Eq sizeT => Eq (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: Stmt sizeT -> Stmt sizeT -> Bool #

(/=) :: Stmt sizeT -> Stmt sizeT -> Bool #

HasAst (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

_ast :: Traversal' (Stmt sizeT) (Stmt sizeT) #

HasStmt (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Associated Types

type StmtOf (Stmt sizeT) #

Methods

_stmt :: Traversal' (Stmt sizeT) (StmtOf (Stmt sizeT)) #

Show sizeT => ToCodeString (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => Stmt sizeT -> m () #

type SizeType (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (Stmt sizeT) = sizeT
type StmtOf (Stmt sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type StmtOf (Stmt sizeT) = Stmt sizeT

Procedures

data ParamTag #

Instances

Instances details
Enum ParamTag # 
Instance details

Defined in Traq.CQPL.Syntax

Read ParamTag # 
Instance details

Defined in Traq.CQPL.Syntax

Show ParamTag # 
Instance details

Defined in Traq.CQPL.Syntax

Eq ParamTag # 
Instance details

Defined in Traq.CQPL.Syntax

ToCodeString ParamTag # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => ParamTag -> m () #

data UProcBody sizeT #

Unitary Procedure body: either a statement (with parameter name bindings) or a tick.

Instances

Instances details
Read sizeT => Read (UProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Show sizeT => Show (UProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> UProcBody sizeT -> ShowS #

show :: UProcBody sizeT -> String #

showList :: [UProcBody sizeT] -> ShowS #

Eq sizeT => Eq (UProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: UProcBody sizeT -> UProcBody sizeT -> Bool #

(/=) :: UProcBody sizeT -> UProcBody sizeT -> Bool #

type SizeType (UProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (UProcBody sizeT) = sizeT

data CProcBody sizeT #

Classical Procedure body: either a tick, or statement with bindings for parameters names, and optionally using local variables.

Constructors

CProcBody 
CProcDecl 

Instances

Instances details
Read sizeT => Read (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Show sizeT => Show (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> CProcBody sizeT -> ShowS #

show :: CProcBody sizeT -> String #

showList :: [CProcBody sizeT] -> ShowS #

Eq sizeT => Eq (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: CProcBody sizeT -> CProcBody sizeT -> Bool #

(/=) :: CProcBody sizeT -> CProcBody sizeT -> Bool #

HasStmt (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Associated Types

type StmtOf (CProcBody sizeT) #

Methods

_stmt :: Traversal' (CProcBody sizeT) (StmtOf (CProcBody sizeT)) #

type SizeType (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (CProcBody sizeT) = sizeT
type StmtOf (CProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type StmtOf (CProcBody sizeT) = Stmt sizeT

data ProcBody sizeT #

Constructors

ProcBodyU (UProcBody sizeT) 
ProcBodyC (CProcBody sizeT) 

Instances

Instances details
Read sizeT => Read (ProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Show sizeT => Show (ProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> ProcBody sizeT -> ShowS #

show :: ProcBody sizeT -> String #

showList :: [ProcBody sizeT] -> ShowS #

Eq sizeT => Eq (ProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: ProcBody sizeT -> ProcBody sizeT -> Bool #

(/=) :: ProcBody sizeT -> ProcBody sizeT -> Bool #

type SizeType (ProcBody sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (ProcBody sizeT) = sizeT

data ProcDef sizeT #

Instances

Instances details
Read sizeT => Read (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

readsPrec :: Int -> ReadS (ProcDef sizeT) #

readList :: ReadS [ProcDef sizeT] #

readPrec :: ReadPrec (ProcDef sizeT) #

readListPrec :: ReadPrec [ProcDef sizeT] #

Show sizeT => Show (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> ProcDef sizeT -> ShowS #

show :: ProcDef sizeT -> String #

showList :: [ProcDef sizeT] -> ShowS #

Eq sizeT => Eq (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: ProcDef sizeT -> ProcDef sizeT -> Bool #

(/=) :: ProcDef sizeT -> ProcDef sizeT -> Bool #

HasProcCtx (ProcCtx sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

_procCtx :: (sizeT0 ~ SizeType (ProcCtx sizeT), precT ~ PrecType (ProcCtx sizeT)) => Lens' (ProcCtx sizeT) (ProcCtx sizeT0) #

HasStmt (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Associated Types

type StmtOf (ProcDef sizeT) #

Methods

_stmt :: Traversal' (ProcDef sizeT) (StmtOf (ProcDef sizeT)) #

Show sizeT => ToCodeString (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => ProcDef sizeT -> m () #

type SizeType (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (ProcDef sizeT) = sizeT
type StmtOf (ProcDef sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type StmtOf (ProcDef sizeT) = Stmt sizeT

Program

type ProcCtx sizeT = Context (ProcDef sizeT) #

CQ procedures

newtype Program sizeT #

CQ Program

Constructors

Program [ProcDef sizeT] 

Instances

Instances details
Read sizeT => Read (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

readsPrec :: Int -> ReadS (Program sizeT) #

readList :: ReadS [Program sizeT] #

readPrec :: ReadPrec (Program sizeT) #

readListPrec :: ReadPrec [Program sizeT] #

Show sizeT => Show (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

showsPrec :: Int -> Program sizeT -> ShowS #

show :: Program sizeT -> String #

showList :: [Program sizeT] -> ShowS #

Eq sizeT => Eq (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

(==) :: Program sizeT -> Program sizeT -> Bool #

(/=) :: Program sizeT -> Program sizeT -> Bool #

HasStmt (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Associated Types

type StmtOf (Program sizeT) #

Methods

_stmt :: Traversal' (Program sizeT) (StmtOf (Program sizeT)) #

Show sizeT => ToCodeString (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

build :: (MonadWriter [String] m, MonadFail m) => Program sizeT -> m () #

type SizeType (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type SizeType (Program sizeT) = sizeT
type StmtOf (Program sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

type StmtOf (Program sizeT) = Stmt sizeT

Syntax Sugar

ifThenS :: Ident -> Stmt sizeT -> Stmt sizeT #

mkForInRangeS :: Ident -> MetaParam sizeT -> UStmt sizeT -> UStmt sizeT #

desugarS :: CanDesugar p => p -> Maybe p #

Lenses

class HasProcCtx s where #

Methods

_procCtx :: (sizeT ~ SizeType s, precT ~ PrecType s) => Lens' s (ProcCtx sizeT) #

Instances

Instances details
HasProcCtx (ProcCtx sizeT) # 
Instance details

Defined in Traq.CQPL.Syntax

Methods

_procCtx :: (sizeT0 ~ SizeType (ProcCtx sizeT), precT ~ PrecType (ProcCtx sizeT)) => Lens' (ProcCtx sizeT) (ProcCtx sizeT0) #

HasProcCtx (CheckingCtx sizeT) # 
Instance details

Defined in Traq.CQPL.TypeCheck

Methods

_procCtx :: (sizeT0 ~ SizeType (CheckingCtx sizeT), precT ~ PrecType (CheckingCtx sizeT)) => Lens' (CheckingCtx sizeT) (ProcCtx sizeT0) #

isUProc :: ClassifyProc p => p -> Bool #

isCProc :: ClassifyProc p => p -> Bool #