Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
11c582e
[UTxO-HD][skin] Add mk-skin review-intermediate plan + spike patches
jasagredo Jun 22, 2026
88c8f50
[UTxO-HD][skin] Phase 0: mk-skin types in Ledger.Basics (lib green)
jasagredo Jun 22, 2026
c3a54e9
[UTxO-HD][skin] Phase 1 foundation: mk on LedgerState + skin vocabula…
jasagredo Jun 22, 2026
481a660
[UTxO-HD][skin] Phase 1: Basics internally consistent
jasagredo Jun 22, 2026
d99a699
[UTxO-HD][skin] Record apply-path re-dress spec (ApplyBlock) for cont…
jasagredo Jun 22, 2026
75ad86d
[UTxO-HD][skin] Phase 1: Abstract apply-path mk-annotated
jasagredo Jun 22, 2026
c92f74a
[UTxO-HD][skin] Phase 1: mk-annotate core Ledger/ signatures
jasagredo Jun 22, 2026
c13e6a6
[UTxO-HD][skin] Phase 1: mk-annotate Forging + Mempool/Capacity ticke…
jasagredo Jun 22, 2026
7fd36dd
[UTxO-HD][skin] Record apply-path altitude decision + mechanical-swee…
jasagredo Jun 22, 2026
725e851
[UTxO-HD][skin] Phase 1 sweep: HardFork/Abstract, Mempool/API, Foreca…
jasagredo Jun 22, 2026
5c3eed7
[UTxO-HD][skin] Phase 1 sweep: SupportsProtocol, CrossEraForecaster, …
jasagredo Jun 22, 2026
0653326
[UTxO-HD][skin] Update plan: abstract layer done, frontier at Storage…
jasagredo Jun 22, 2026
478d0ff
[UTxO-HD][skin] Phase 1: Storage Forker/Snapshots + abstract stragglers
jasagredo Jun 22, 2026
c26a44b
[UTxO-HD][skin] Phase 1: Storage LedgerDB API (LedgerDB -> StateKind,…
jasagredo Jun 22, 2026
4c5cfdd
[UTxO-HD][skin] Phase 1: Storage V2/LedgerSeq (handle/StateRef/Ledger…
jasagredo Jun 22, 2026
eaa9fcf
[UTxO-HD][skin] Phase 1: Storage V2/Forker, V2/Backend, Args (states …
jasagredo Jun 22, 2026
1c9efa8
[UTxO-HD][skin] Phase 1: Storage V2/InMemory backend (impl state args…
jasagredo Jun 22, 2026
c40b6d9
[UTxO-HD][skin] Phase 1: Storage V2 driver (LedgerDBEnv/Handle -> Sta…
jasagredo Jun 22, 2026
07e89ef
[UTxO-HD][skin] Phase 1: ChainDB API/Init/Args/Query + Ledger/Query +…
jasagredo Jun 22, 2026
0d6a8e6
[UTxO-HD][skin] Update plan: Storage/LedgerDB subsystem complete; fro…
jasagredo Jun 22, 2026
69a6fb2
[UTxO-HD][skin] Phase 1: Dual apply/serialisation, SingleEraBlock, Ch…
jasagredo Jun 22, 2026
8d61bc4
[UTxO-HD][skin] Record the HFC Flip fork (revert decision 1 vs phanto…
jasagredo Jun 22, 2026
8862f5a
[UTxO-HD][skin] Phase 1 (HFC, option 2): Combinator/Basics green + St…
jasagredo Jun 22, 2026
9451d1c
[UTxO-HD][skin] Plan: HFC option 2 decided; document the remaining St…
jasagredo Jun 22, 2026
445a995
[UTxO-HD][skin] Phase 1 (HFC): Combinator/State green; Ledger.hs Tick…
jasagredo Jun 22, 2026
b84bc41
[UTxO-HD][skin] Phase 1 (HFC): Combinator/Ledger.hs core green; consu…
jasagredo Jun 22, 2026
990a972
[UTxO-HD][skin] Phase 1 (HFC): CommonProtocolParams green; Query/Memp…
jasagredo Jun 22, 2026
5fbed77
[UTxO-HD][skin] Phase 1 (HFC): Query go-bodies Flip-unwrap; Mempool/C…
jasagredo Jun 22, 2026
d423a77
[UTxO-HD][skin] Phase 1 (HFC): Mempool Flip-wrap functor args; Mempoo…
jasagredo Jun 22, 2026
17c1e68
[UTxO-HD][skin] Phase 1 (HFC): Forging mk-annotate + Flip-wrap forgeB…
jasagredo Jun 22, 2026
6e70969
[UTxO-HD][skin] Phase 1 (HFC): Embed/Unary,Nary,Binary restore Flip/F…
jasagredo Jun 22, 2026
8586e4e
[UTxO-HD][skin] Phase 1 (HFC): Degenerate DegenLedgerState Flip-wrap …
jasagredo Jun 22, 2026
b87ef5a
[UTxO-HD][skin] Plan: mark lib:ouroboros-consensus GREEN; next = diff…
jasagredo Jun 22, 2026
7291cdc
[UTxO-HD][skin] Port diffusion lib to mk-skin: state positions -> Emp…
jasagredo Jun 22, 2026
24b7dea
[UTxO-HD][skin] Re-dress the lsm backend handle/stream sigs to EmptyMK
jasagredo Jun 22, 2026
d094be6
[UTxO-HD][skin] Integrate diffusion+lsm; record isolation result + ca…
jasagredo Jun 22, 2026
439d22e
[UTxO-HD][skin] Update plan: isolation result, decisions log, current…
jasagredo Jun 22, 2026
7769641
[UTxO-HD][skin][cardano] Byron + Shelley ledger/mempool/forge/inspect…
jasagredo Jun 22, 2026
acd16ef
[UTxO-HD][skin][cardano] Cardano/Block.hs: mk-skin the LedgerState pa…
jasagredo Jun 22, 2026
82f0b5c
[UTxO-HD][skin][cardano] Cardano/CanHardFork.hs: restore Flip/Comp er…
jasagredo Jun 22, 2026
6ba7ea4
[UTxO-HD][skin][cardano] Cardano/Node.hs: mk-skin protocolInfoCardano…
jasagredo Jun 22, 2026
ed57506
[UTxO-HD][skin] Plan: cardano+protocol integrated — ALL FIVE LIBS GRE…
jasagredo Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
377 changes: 377 additions & 0 deletions mk-skin-plan.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ byronTransition ::
PartialLedgerConfig ByronBlock ->
-- | Shelley major protocol version
Word16 ->
LedgerState ByronBlock ->
LedgerState ByronBlock mk ->
Maybe EpochNo
byronTransition partialConfig shelleyMajorVersion state =
takeAny
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ forgeByronBlock ::
-- | Current slot number
SlotNo ->
-- | Current ledger
TickedLedgerState ByronBlock ->
TickedLedgerState ByronBlock mk ->
-- | Txs to include
[Validated (GenTx ByronBlock)] ->
-- | Leader proof ('IsLeader')
Expand Down Expand Up @@ -137,7 +137,7 @@ forgeRegularBlock ::
-- | Current slot number
SlotNo ->
-- | Current ledger
TickedLedgerState ByronBlock ->
TickedLedgerState ByronBlock mk ->
-- | Txs to include
[Validated (GenTx ByronBlock)] ->
-- | Leader proof ('IsLeader')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ data UpdateState
-- | All proposal updates, from new to old
protocolUpdates ::
LedgerConfig ByronBlock ->
LedgerState ByronBlock ->
LedgerState ByronBlock mk ->
[ProtocolUpdate]
protocolUpdates genesis st =
concat
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ import Ouroboros.Consensus.Util (ShowProxy (..))
LedgerState
-------------------------------------------------------------------------------}

data instance LedgerState ByronBlock = ByronLedgerState
data instance LedgerState ByronBlock mk = ByronLedgerState
{ byronLedgerTipBlockNo :: !(WithOrigin BlockNo)
, byronLedgerState :: !CC.ChainValidationState
, byronLedgerTransition :: !ByronTransition
Expand Down Expand Up @@ -127,7 +127,7 @@ initByronLedgerState ::
Gen.Config ->
-- | Optionally override UTxO
Maybe CC.UTxO ->
LedgerState ByronBlock
LedgerState ByronBlock mk
initByronLedgerState genesis mUtxo =
ByronLedgerState
{ byronLedgerState = override mUtxo initState
Expand Down Expand Up @@ -174,7 +174,7 @@ getByronTip state =
-------------------------------------------------------------------------------}

-- | The ticked Byron ledger state
data instance Ticked LedgerState ByronBlock = TickedByronLedgerState
data instance Ticked LedgerState ByronBlock mk = TickedByronLedgerState
{ tickedByronLedgerState :: !CC.ChainValidationState
, untickedByronLedgerTransition :: !ByronTransition
}
Expand Down Expand Up @@ -264,7 +264,7 @@ instance CommonProtocolParams ByronBlock where
maxTxSize = fromIntegral . Update.ppMaxTxSize . getProtocolParameters

-- | Return the protocol parameters adopted by the given ledger.
getProtocolParameters :: LedgerState ByronBlock -> Update.ProtocolParameters
getProtocolParameters :: LedgerState ByronBlock mk -> Update.ProtocolParameters
getProtocolParameters =
CC.adoptedProtocolParameters
. CC.cvsUpdateState
Expand Down Expand Up @@ -371,8 +371,8 @@ applyByronBlock ::
ComputeLedgerEvents ->
LedgerConfig ByronBlock ->
ByronBlock ->
TickedLedgerState ByronBlock ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock)
TickedLedgerState ByronBlock mk1 ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock mk2)
applyByronBlock
doValidation
_doEvents
Expand All @@ -398,8 +398,8 @@ applyABlock ::
CC.ABlock ByteString ->
CC.HeaderHash ->
BlockNo ->
TickedLedgerState ByronBlock ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock)
TickedLedgerState ByronBlock mk1 ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock mk2)
applyABlock validationMode cfg blk blkHash blkNo TickedByronLedgerState{..} = do
st' <- CC.validateBlock cfg validationMode blk blkHash tickedByronLedgerState

Expand Down Expand Up @@ -441,8 +441,8 @@ applyABoundaryBlock ::
Gen.Config ->
CC.ABoundaryBlock ByteString ->
BlockNo ->
TickedLedgerState ByronBlock ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock)
TickedLedgerState ByronBlock mk1 ->
Except (LedgerError ByronBlock) (LedgerState ByronBlock mk2)
applyABoundaryBlock cfg blk blkNo TickedByronLedgerState{..} = do
st' <- CC.validateBoundary cfg blk tickedByronLedgerState
return
Expand All @@ -462,7 +462,7 @@ encodeByronAnnTip = encodeAnnTipIsEBB encodeByronHeaderHash
decodeByronAnnTip :: Decoder s (AnnTip ByronBlock)
decodeByronAnnTip = decodeAnnTipIsEBB decodeByronHeaderHash

encodeByronExtLedgerState :: ExtLedgerState ByronBlock -> Encoding
encodeByronExtLedgerState :: ExtLedgerState ByronBlock mk -> Encoding
encodeByronExtLedgerState =
encodeExtLedgerState
encodeByronLedgerState
Expand Down Expand Up @@ -529,7 +529,7 @@ decodeByronTransition = do
bno <- decode
return (Update.ProtocolVersion{pvMajor, pvMinor, pvAlt}, bno)

encodeByronLedgerState :: LedgerState ByronBlock -> Encoding
encodeByronLedgerState :: LedgerState ByronBlock mk -> Encoding
encodeByronLedgerState ByronLedgerState{..} =
mconcat
[ encodeListLen 3
Expand All @@ -538,7 +538,7 @@ encodeByronLedgerState ByronLedgerState{..} =
, encodeByronTransition byronLedgerTransition
]

decodeByronLedgerState :: Decoder s (LedgerState ByronBlock)
decodeByronLedgerState :: Decoder s (LedgerState ByronBlock mk)
decodeByronLedgerState = do
enforceSize "ByronLedgerState" 3
ByronLedgerState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,8 @@ applyByronGenTx ::
LedgerConfig ByronBlock ->
SlotNo ->
GenTx ByronBlock ->
TickedLedgerState ByronBlock ->
Except (ApplyTxErr ByronBlock) (TickedLedgerState ByronBlock)
TickedLedgerState ByronBlock mk1 ->
Except (ApplyTxErr ByronBlock) (TickedLedgerState ByronBlock mk2)
applyByronGenTx validationMode cfg slot genTx st =
(\state -> st{tickedByronLedgerState = state})
<$> CC.applyMempoolPayload
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ instance EncodeDisk ByronBlock ByronBlock where
instance DecodeDisk ByronBlock (Lazy.ByteString -> Either DecoderError ByronBlock) where
decodeDisk ccfg = (Right .) <$> decodeByronBlock (getByronEpochSlots ccfg)

instance EncodeDisk ByronBlock (LedgerState ByronBlock) where
instance EncodeDisk ByronBlock (LedgerState ByronBlock mk) where
encodeDisk _ = encodeByronLedgerState
instance DecodeDisk ByronBlock (LedgerState ByronBlock) where
instance DecodeDisk ByronBlock (LedgerState ByronBlock mk) where
decodeDisk _ = decodeByronLedgerState

-- | @'ChainDepState' ('BlockProtocol' 'ByronBlock')@
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ module Ouroboros.Consensus.Cardano.Block

import Data.Kind
import Data.SOP.BasicFunctors
import Data.SOP.Functors (Flip (..))
import Data.SOP.Strict
import Ouroboros.Consensus.Block (BlockProtocol)
import Ouroboros.Consensus.Byron.Ledger.Block (ByronBlock)
Expand All @@ -219,7 +220,7 @@ import Ouroboros.Consensus.HeaderValidation
( OtherHeaderEnvelopeError
, TipInfo
)
import Ouroboros.Consensus.Ledger.Abstract (LedgerError)
import Ouroboros.Consensus.Ledger.Abstract (EmptyMK, LedgerError)
import Ouroboros.Consensus.Ledger.Query
import Ouroboros.Consensus.Ledger.SupportsMempool
( ApplyTxErr
Expand Down Expand Up @@ -1337,78 +1338,78 @@ pattern CardanoLedgerConfig cfgByron cfgShelley cfgAllegra cfgMary cfgAlonzo cfg
-- 'LedgerState'. We don't give access to those internal details through the
-- pattern synonyms. This is also the reason the pattern synonyms are not
-- bidirectional.
type CardanoLedgerState c = LedgerState (CardanoBlock c)
type CardanoLedgerState c mk = LedgerState (CardanoBlock c) mk

pattern LedgerStateByron ::
LedgerState ByronBlock ->
CardanoLedgerState c
LedgerState ByronBlock EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateByron st <-
HardForkLedgerState
( State.HardForkState
(TeleByron (State.Current{currentState = st}))
(TeleByron (State.Current{currentState = Flip st}))
)

pattern LedgerStateShelley ::
LedgerState (ShelleyBlock (TPraos c) ShelleyEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (TPraos c) ShelleyEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateShelley st <-
HardForkLedgerState
( State.HardForkState
(TeleShelley _ (State.Current{currentState = st}))
(TeleShelley _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateAllegra ::
LedgerState (ShelleyBlock (TPraos c) AllegraEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (TPraos c) AllegraEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateAllegra st <-
HardForkLedgerState
( State.HardForkState
(TeleAllegra _ _ (State.Current{currentState = st}))
(TeleAllegra _ _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateMary ::
LedgerState (ShelleyBlock (TPraos c) MaryEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (TPraos c) MaryEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateMary st <-
HardForkLedgerState
( State.HardForkState
(TeleMary _ _ _ (State.Current{currentState = st}))
(TeleMary _ _ _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateAlonzo ::
LedgerState (ShelleyBlock (TPraos c) AlonzoEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (TPraos c) AlonzoEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateAlonzo st <-
HardForkLedgerState
( State.HardForkState
(TeleAlonzo _ _ _ _ (State.Current{currentState = st}))
(TeleAlonzo _ _ _ _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateBabbage ::
LedgerState (ShelleyBlock (Praos c) BabbageEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (Praos c) BabbageEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateBabbage st <-
HardForkLedgerState
( State.HardForkState
(TeleBabbage _ _ _ _ _ (State.Current{currentState = st}))
(TeleBabbage _ _ _ _ _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateConway ::
LedgerState (ShelleyBlock (Praos c) ConwayEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (Praos c) ConwayEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateConway st <-
HardForkLedgerState
( State.HardForkState
(TeleConway _ _ _ _ _ _ (State.Current{currentState = st}))
(TeleConway _ _ _ _ _ _ (State.Current{currentState = Flip st}))
)

pattern LedgerStateDijkstra ::
LedgerState (ShelleyBlock (Praos c) DijkstraEra) ->
CardanoLedgerState c
LedgerState (ShelleyBlock (Praos c) DijkstraEra) EmptyMK ->
CardanoLedgerState c EmptyMK
pattern LedgerStateDijkstra st <-
HardForkLedgerState
( State.HardForkState
(TeleDijkstra _ _ _ _ _ _ _ (State.Current{currentState = st}))
(TeleDijkstra _ _ _ _ _ _ _ (State.Current{currentState = Flip st}))
)

{-# COMPLETE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import qualified Data.Map.Strict as Map
import Data.Maybe.Strict (StrictMaybe (..))
import Data.Proxy
import Data.SOP.BasicFunctors
import Data.SOP.Functors (Flip (..))
import Data.SOP.InPairs (RequiringBoth (..), ignoringBoth)
import qualified Data.SOP.Strict as SOP
import Data.SOP.Tails (Tails (..))
Expand Down Expand Up @@ -383,6 +384,7 @@ translateLedgerStateByronToShelleyWrapper =
, shelleyLedgerStateNoUTxO = stateNoUTxO
, shelleyLedgerTransition =
ShelleyTransitionInfo{shelleyAfterVoting = 0}
, shelleyLedgerTables = emptyLedgerTables
, shelleyLedgerLatestPerasCertRound = SNothing
}
, Diff.fromMapInserts utxo
Expand Down Expand Up @@ -455,7 +457,7 @@ crossEraForecastByronToShelleyWrapper =
ShelleyLedgerConfig ShelleyEra ->
Bound ->
SlotNo ->
LedgerState ByronBlock ->
LedgerState ByronBlock mk ->
Except
OutsideForecastRange
(WrapLedgerView (ShelleyBlock (TPraos c) ShelleyEra))
Expand Down Expand Up @@ -535,9 +537,11 @@ translateLedgerStateShelleyToAllegraWrapper =
-- The remaining (UTxO-free) ledger-state fields translate
-- normally; we override the NES with the AVVM-consumed one above.
lsAllegra =
unComp
unFlip
. unComp
. SL.translateEra' SL.NoGenesis
. Comp
. Flip
$ ls
in ( lsAllegra{shelleyLedgerStateNoUTxO = stateNoUTxO}
, avvmsAsDeletions
Expand Down Expand Up @@ -587,7 +591,7 @@ translateLedgerStateAllegraToMaryWrapper =
-- A pure-upgrade boundary: the state translates with no new diffs.
-- The per-era 'TxOut' upgrade of the on-disk values is handled by
-- 'translateValues' when the first block's values are read.
(unComp . SL.translateEra' SL.NoGenesis . Comp $ ls, mempty)
(unFlip . unComp . SL.translateEra' SL.NoGenesis . Comp . Flip $ ls, mempty)
}

translateLedgerTablesAllegraToMaryWrapper ::
Expand Down Expand Up @@ -630,7 +634,7 @@ translateLedgerStateMaryToAlonzoWrapper =
RequireBoth $ \_cfgMary cfgAlonzo ->
TranslateLedgerState
{ translateLedgerStateWith = \_epochNo ls ->
( unComp . SL.translateEra' (getAlonzoTranslationContext cfgAlonzo) . Comp $ ls
( unFlip . unComp . SL.translateEra' (getAlonzoTranslationContext cfgAlonzo) . Comp . Flip $ ls
, mempty
)
}
Expand Down Expand Up @@ -684,19 +688,20 @@ translateLedgerStateAlonzoToBabbageWrapper =
RequireBoth $ \_cfgAlonzo _cfgBabbage ->
TranslateLedgerState
{ translateLedgerStateWith = \_epochNo ls ->
( unComp . SL.translateEra' SL.NoGenesis . Comp . transPraosLS $ ls
( unFlip . unComp . SL.translateEra' SL.NoGenesis . Comp . Flip . transPraosLS $ ls
, mempty
)
}
where
transPraosLS ::
LedgerState (ShelleyBlock (TPraos c) AlonzoEra) ->
LedgerState (ShelleyBlock (Praos c) AlonzoEra)
transPraosLS (ShelleyLedgerState wo nes st lcr) =
LedgerState (ShelleyBlock (TPraos c) AlonzoEra) EmptyMK ->
LedgerState (ShelleyBlock (Praos c) AlonzoEra) EmptyMK
transPraosLS (ShelleyLedgerState wo nes st _tb lcr) =
ShelleyLedgerState
{ shelleyLedgerTip = fmap castShelleyTip wo
, shelleyLedgerStateNoUTxO = nes
, shelleyLedgerTransition = st
, shelleyLedgerTables = emptyLedgerTables
, shelleyLedgerLatestPerasCertRound = lcr
}

Expand Down Expand Up @@ -761,7 +766,7 @@ translateLedgerStateBabbageToConwayWrapper =
RequireBoth $ \_cfgBabbage cfgConway ->
TranslateLedgerState
{ translateLedgerStateWith = \_epochNo ls ->
( unComp . SL.translateEra' (getConwayTranslationContext cfgConway) . Comp $ ls
( unFlip . unComp . SL.translateEra' (getConwayTranslationContext cfgConway) . Comp . Flip $ ls
, mempty
)
}
Expand Down Expand Up @@ -815,7 +820,7 @@ translateLedgerStateConwayToDijkstraWrapper =
RequireBoth $ \_cfgConway cfgDijkstra ->
TranslateLedgerState
{ translateLedgerStateWith = \_epochNo ls ->
( unComp . SL.translateEra' (getDijkstraTranslationContext cfgDijkstra) . Comp $ ls
( unFlip . unComp . SL.translateEra' (getDijkstraTranslationContext cfgDijkstra) . Comp . Flip $ ls
, mempty
)
}
Expand Down
Loading
Loading