updates, hierarchical
[clean-tests.git] / uds / ASDS / Select.dcl
1 definition module ASDS.Select
2
3 from ASDS import class read, class write
4 from ASDS.Lens import :: Lens
5 from Control.Monad import class Monad
6 from Control.Monad.Fail import class MonadFail
7 from Control.Applicative import class Applicative, class <*>, class pure
8 from Data.Functor import class Functor
9
10 //* Determine a share from the value read from another share
11 :: Select sdsl sdsr m p r w = E.p1 r1 w1 p2: Select (SelectOpts sdsl sdsr m p1 r1 w1 p2 p r w) & TC r1 & TC p1 & TC p2
12 :: SelectOpts sdsl sdsr m p1 r1 w1 p2 p r w =
13 { index :: sdsl m p1 r1 w1
14 , source :: sdsr m p2 r w
15 , parami :: p -> p1
16 , params :: p r1 -> p2
17 , unused :: m ()
18 }
19 select` :: (p -> p1) (p r1 -> p2) (sdsl m p1 r1 w1) (sdsr m p2 r w) -> Select sdsl sdsr m p r w | TC p & TC p1 & TC p2 & TC r1 & TC r & TC w & pure m
20
21 instance read (Select sdsl sdsr) | read sdsl & read sdsr
22 instance write (Select sdsl sdsr) | read sdsl & write sdsr
23
24 selectList :: (sdss m p1 Int w1) (sdsc m p2 [a] [a]) -> Select sdss (Lens sdsc) m (p1, p2) a a | TC p1 & TC p2 & TC a & TC w1 & MonadFail m