sessions-2008.2.23: Session Types for Haskell

Control.Concurrent.Session.SessionType

Description

This module is concerned with allowing you to describe a session type. A session type is treated as a table or 2D array, where each row represents a particular session type function which can refer, by index, to the other rows.

Basically, what you have here is the ability to describe a program at the type level.

Just look at Control.Concurrent.Session.Tests for examples

Documentation

data Send whereSource

Instances

SNonTerminal (Send t) 
SNoJumpsBeyond (Send t) idx 
Dual (Recv t) (Send t) 
Dual (Send t) (Recv t) 
OnlyOutgoing nxt nxt' => OnlyOutgoing (Cons (Send t) nxt) (Cons t nxt') 

data Recv whereSource

Instances

SNonTerminal (Recv t) 
SNoJumpsBeyond (Recv t) idx 
Dual (Recv t) (Send t) 
Dual (Send t) (Recv t) 
OnlyOutgoing nxt nxt' => OnlyOutgoing (Cons (Recv t) nxt) nxt' 

data Jump l Source

Constructors

Jump l 

Instances

Show l => Show (Jump l) 
TyNum l => STerminal (Jump l) 
SmallerThan l idx => SNoJumpsBeyond (Jump l) idx 
Dual (Jump l) (Jump l) 
(SListOfJumps nxt, TyNum val) => SListOfJumps (Cons (Cons (Jump val) Nil) nxt) 
OnlyOutgoing (Cons (Jump l) Nil) (Cons (Jump l) Nil) 

jump :: TyNum n => n -> Cons (Jump n) NilSource

data Select whereSource

Constructors

Select :: lstOfLabels -> Select lstOfLabels 

Instances

SListOfJumps (Cons val nxt) => STerminal (Select (Cons val nxt)) 
SNoJumpsBeyond lol idx => SNoJumpsBeyond (Select lol) idx 
Dual (Offer lst) (Select lst) 
Dual (Select lst) (Offer lst) 
OnlyOutgoing (Cons (Select jl) Nil) (Cons (Choice jl) Nil) 

select :: SListOfJumps (Cons val nxt) => Cons val nxt -> Cons (Select (Cons val nxt)) NilSource

data Offer whereSource

Constructors

Offer :: lstOfLabels -> Offer lstOfLabels 

Instances

SListOfJumps (Cons val nxt) => STerminal (Offer (Cons val nxt)) 
SNoJumpsBeyond lol idx => SNoJumpsBeyond (Offer lol) idx 
Dual (Offer lst) (Select lst) 
Dual (Select lst) (Offer lst) 
OnlyOutgoing (Cons (Offer jl) Nil) (Cons (Choice jl) Nil) 

offer :: SListOfJumps (Cons val nxt) => Cons val nxt -> Cons (Offer (Cons val nxt)) NilSource

class Dual a b | a -> b, b -> a whereSource

Methods

dual :: a -> bSource

Instances

Dual Nil Nil 
Dual End End 
Dual (Offer lst) (Select lst) 
Dual (Select lst) (Offer lst) 
Dual (Jump l) (Jump l) 
Dual (Recv t) (Send t) 
Dual (Send t) (Recv t) 
(Dual val val', Dual nxt nxt') => Dual (Cons val nxt) (Cons val' nxt') 

class SListOfJumps lst Source

Instances

class STerminal a Source

Instances

STerminal End 
SListOfJumps (Cons val nxt) => STerminal (Offer (Cons val nxt)) 
SListOfJumps (Cons val nxt) => STerminal (Select (Cons val nxt)) 
TyNum l => STerminal (Jump l) 

(~>) :: (TyList nxt, SNonTerminal a, SValidSessionType nxt) => a -> nxt -> Cons a nxtSource

(~|~) :: (TyNum target, TyList nxt) => target -> nxt -> Cons (Cons (Jump target) Nil) nxtSource

class SNoJumpsBeyond s idx Source

Instances

SNoJumpsBeyond Nil idx 
SNoJumpsBeyond End idx 
SNoJumpsBeyond lol idx => SNoJumpsBeyond (Offer lol) idx 
SNoJumpsBeyond lol idx => SNoJumpsBeyond (Select lol) idx 
SmallerThan l idx => SNoJumpsBeyond (Jump l) idx 
SNoJumpsBeyond (Recv t) idx 
SNoJumpsBeyond (Send t) idx 
(SNoJumpsBeyond val idx, SNoJumpsBeyond nxt idx) => SNoJumpsBeyond (Cons val nxt) idx 

class SWellFormedConfig idxA idxB ss Source

Instances

(SListOfSessionTypes ss, ListLength ss len, SNoJumpsBeyond ss len, SmallerThan idxA len, Elem ss idxA st, ListLength st len', SmallerThan idxB len') => SWellFormedConfig idxA idxB ss 

testWellformed :: SWellFormedConfig idxA idxB ss => ss -> idxA -> idxB -> BoolSource

data Choice whereSource

Constructors

Choice :: lstOfLabels -> Choice lstOfLabels 

Instances

class OnlyOutgoing a b | a -> b whereSource

Methods

onlyOutgoing :: a -> bSource

Instances

OnlyOutgoing nxt nxt' => OnlyOutgoing (Cons (Recv t) nxt) nxt' 
OnlyOutgoing (Cons (Offer jl) Nil) (Cons (Choice jl) Nil) 
OnlyOutgoing (Cons (Select jl) Nil) (Cons (Choice jl) Nil) 
OnlyOutgoing (Cons (Jump l) Nil) (Cons (Jump l) Nil) 
OnlyOutgoing nxt nxt' => OnlyOutgoing (Cons (Send t) nxt) (Cons t nxt') 
OnlyOutgoing (Cons End Nil) (Cons End Nil)