Skip to content

Commit 8f80353

Browse files
author
euonymos
committed
chore: refactor compile module
1 parent e15ae64 commit 8f80353

File tree

1 file changed

+32
-33
lines changed

1 file changed

+32
-33
lines changed

src/Cardano/CEM/Compile.hs

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,58 +20,57 @@ allTransitions ::
2020
( Maybe (Spine (State script)) -- source 'State'
2121
, Maybe (Spine (State script)) -- target 'State'
2222
)
23-
allTransitions = Map.map foo transitionSpec
23+
allTransitions = Map.map inOut transitionSpec
2424
where
25-
foo :: [TxConstraint False script] -> (Maybe (Spine (State script)), Maybe (Spine (State script)))
26-
foo cs = (transitionInStateSpine cs, transitionOutStateSpine cs)
25+
inOut :: [TxConstraint False script] -> (Maybe (Spine (State script)), Maybe (Spine (State script)))
26+
inOut cs = (transitionInStateSpine cs, transitionOutStateSpine cs)
2727

2828
transitionInStateSpine ::
2929
(CEMScript script) =>
3030
[TxConstraint False script] ->
3131
Maybe (Spine (State script))
32-
transitionInStateSpine spec = case transitionStateSpines In spec of
33-
[x] -> Just x
34-
[] -> Nothing
35-
_ ->
36-
error
37-
"Transition should not have more than one SameScript In constraint"
32+
transitionInStateSpine = onlyTransitionStateSpine In
3833

3934
transitionOutStateSpine ::
4035
(CEMScript script) =>
4136
[TxConstraint False script] ->
4237
Maybe (Spine (State script))
43-
transitionOutStateSpine spec = case transitionStateSpines Out spec of
38+
transitionOutStateSpine = onlyTransitionStateSpine Out
39+
40+
onlyTransitionStateSpine ::
41+
(CEMScript script) =>
42+
TxFanKind ->
43+
[TxConstraint False script] ->
44+
Maybe (Spine (State script))
45+
onlyTransitionStateSpine kind spec = case transitionStateSpines kind spec of
4446
[x] -> Just x
4547
[] -> Nothing
4648
_ ->
4749
error
48-
"Transition should not have more than one SameScript In constraint"
50+
"Transition should not have more than one SameScript In/Out/InRef constraint"
4951

50-
transitionStateSpines :: (CEMScript script) => TxFanKind -> [TxConstraint False script] -> [Spine (State script)]
51-
transitionStateSpines kind spec = concat $ map (sameScriptStateSpinesOfKind kind) spec
52+
-- | Get all states for a transition constraints based on a utxo kind.
53+
transitionStateSpines ::
54+
forall script.
55+
(CEMScript script) =>
56+
TxFanKind ->
57+
[TxConstraint False script] ->
58+
[Spine (State script)]
59+
transitionStateSpines kind spec = concat $ map ownUtxoState spec
5260
where
53-
sameScriptStateSpinesOfKind ::
54-
forall script.
55-
(CEMScript script) =>
56-
TxFanKind ->
57-
TxConstraint False script ->
58-
[Spine (State script)]
59-
sameScriptStateSpinesOfKind xKind constr = case constr of
60-
TxFan kind (SameScript (MkSameScriptArg state)) _ -> [parseSpine state | kind == xKind]
61-
If _ t e -> recur t <> recur e
62-
MatchBySpine _ caseSwitch -> foldMap recur (Map.elems caseSwitch)
61+
ownUtxoState constr = case constr of
62+
TxFan kind' (SameScript (MkSameScriptArg state)) _ -> [parseSpine state | kind' == kind]
63+
If _ t e -> ownUtxoState t <> ownUtxoState e
64+
MatchBySpine _ caseSwitch -> foldMap ownUtxoState (Map.elems caseSwitch)
6365
_ -> []
64-
where
65-
recur = sameScriptStateSpinesOfKind xKind
66-
parseSpine ::
67-
ConstraintDSL script (State script) -> Spine (State script)
68-
parseSpine (Pure state) = getSpine state
69-
parseSpine (UnsafeOfSpine spine _) = spine
70-
parseSpine (UnsafeUpdateOfSpine _ spine _) = spine
71-
-- FIXME: yet another not-properly DSL type encoded place
72-
parseSpine _ = error "SameScript is too complex to statically know its spine"
7366

74-
-- FIXME: check MainSignerCoinSelect, ...
67+
parseSpine :: ConstraintDSL script (State script) -> Spine (State script)
68+
parseSpine (Pure state) = getSpine state
69+
parseSpine (UnsafeOfSpine spine _) = spine
70+
parseSpine (UnsafeUpdateOfSpine _ spine _) = spine
71+
-- This should not happen anymore due to use of 'SameScriptArg'
72+
-- and smart constructors.
73+
parseSpine _ = error "SameScript is too complex to statically know its spine"
7574

7675
-- | Checking for errors and normalising
7776
preProcessForOnChainCompilation ::

0 commit comments

Comments
 (0)