{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ImpredicativeTypes #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Cardano.Ledger.Conway.Governance.Proposals (
Proposals,
mapProposals,
proposalsIds,
proposalsActions,
proposalsSize,
proposalsAddAction,
proposalsApplyEnactment,
proposalsAddVote,
proposalsLookupId,
proposalsActionsMap,
proposalsWithPurpose,
toPrevGovActionIds,
fromPrevGovActionIds,
proposalsRemoveWithDescendants,
TreeMaybe (..),
toGovRelationTree,
toGovRelationTreeEither,
pPropsL,
pRootsL,
pGraphL,
mkProposals,
unsafeMkProposals,
PRoot (..),
prRootL,
prChildrenL,
PEdges (..),
peChildrenL,
PGraph (..),
pGraphNodesL,
proposalsDeposits,
) where
import Cardano.Ledger.Address (rewardAccountCredentialL)
import Cardano.Ledger.BaseTypes (
StrictMaybe (..),
isSJust,
isSNothing,
strictMaybe,
)
import Cardano.Ledger.Binary (
DecCBOR (..),
DecShareCBOR (..),
EncCBOR (..),
Interns,
decodeListLenOrIndef,
decodeListLikeWithCountT,
decodeRecordNamedT,
)
import Cardano.Ledger.Coin (Coin, CompactForm (CompactCoin), addCompactCoin)
import Cardano.Ledger.Compactible (toCompact)
import Cardano.Ledger.Conway.Governance.Procedures
import Cardano.Ledger.Core
import Cardano.Ledger.Credential (Credential)
import Control.DeepSeq (NFData)
import Control.Exception (assert)
import Control.Monad (unless)
import Control.Monad.Trans (lift)
import Data.Aeson (ToJSON (..))
import Data.Default (Default (..))
import Data.Either (partitionEithers)
import Data.Foldable as F (foldl', foldrM, toList)
import qualified Data.Map as Map
import Data.Map.Strict (Map)
import Data.Maybe (fromMaybe)
import qualified Data.OMap.Strict as OMap
import qualified Data.OSet.Strict as OSet
import Data.Pulse (foldlM')
import Data.Sequence (Seq)
import Data.Sequence.Strict (StrictSeq (..))
import Data.Set (Set)
import qualified Data.Set as Set
import qualified Data.Text as T
import Data.Tree
import GHC.Generics (Generic)
import GHC.Stack
import Lens.Micro
import NoThunks.Class (NoThunks)
data PRoot a = PRoot
{ forall a. PRoot a -> StrictMaybe a
prRoot :: !(StrictMaybe a)
, forall a. PRoot a -> Set a
prChildren :: !(Set a)
}
deriving stock (Int -> PRoot a -> ShowS
[PRoot a] -> ShowS
PRoot a -> String
(Int -> PRoot a -> ShowS)
-> (PRoot a -> String) -> ([PRoot a] -> ShowS) -> Show (PRoot a)
forall a. Show a => Int -> PRoot a -> ShowS
forall a. Show a => [PRoot a] -> ShowS
forall a. Show a => PRoot a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> PRoot a -> ShowS
showsPrec :: Int -> PRoot a -> ShowS
$cshow :: forall a. Show a => PRoot a -> String
show :: PRoot a -> String
$cshowList :: forall a. Show a => [PRoot a] -> ShowS
showList :: [PRoot a] -> ShowS
Show, PRoot a -> PRoot a -> Bool
(PRoot a -> PRoot a -> Bool)
-> (PRoot a -> PRoot a -> Bool) -> Eq (PRoot a)
forall a. Eq a => PRoot a -> PRoot a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => PRoot a -> PRoot a -> Bool
== :: PRoot a -> PRoot a -> Bool
$c/= :: forall a. Eq a => PRoot a -> PRoot a -> Bool
/= :: PRoot a -> PRoot a -> Bool
Eq, Eq (PRoot a)
Eq (PRoot a) =>
(PRoot a -> PRoot a -> Ordering)
-> (PRoot a -> PRoot a -> Bool)
-> (PRoot a -> PRoot a -> Bool)
-> (PRoot a -> PRoot a -> Bool)
-> (PRoot a -> PRoot a -> Bool)
-> (PRoot a -> PRoot a -> PRoot a)
-> (PRoot a -> PRoot a -> PRoot a)
-> Ord (PRoot a)
PRoot a -> PRoot a -> Bool
PRoot a -> PRoot a -> Ordering
PRoot a -> PRoot a -> PRoot a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (PRoot a)
forall a. Ord a => PRoot a -> PRoot a -> Bool
forall a. Ord a => PRoot a -> PRoot a -> Ordering
forall a. Ord a => PRoot a -> PRoot a -> PRoot a
$ccompare :: forall a. Ord a => PRoot a -> PRoot a -> Ordering
compare :: PRoot a -> PRoot a -> Ordering
$c< :: forall a. Ord a => PRoot a -> PRoot a -> Bool
< :: PRoot a -> PRoot a -> Bool
$c<= :: forall a. Ord a => PRoot a -> PRoot a -> Bool
<= :: PRoot a -> PRoot a -> Bool
$c> :: forall a. Ord a => PRoot a -> PRoot a -> Bool
> :: PRoot a -> PRoot a -> Bool
$c>= :: forall a. Ord a => PRoot a -> PRoot a -> Bool
>= :: PRoot a -> PRoot a -> Bool
$cmax :: forall a. Ord a => PRoot a -> PRoot a -> PRoot a
max :: PRoot a -> PRoot a -> PRoot a
$cmin :: forall a. Ord a => PRoot a -> PRoot a -> PRoot a
min :: PRoot a -> PRoot a -> PRoot a
Ord, (forall x. PRoot a -> Rep (PRoot a) x)
-> (forall x. Rep (PRoot a) x -> PRoot a) -> Generic (PRoot a)
forall x. Rep (PRoot a) x -> PRoot a
forall x. PRoot a -> Rep (PRoot a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (PRoot a) x -> PRoot a
forall a x. PRoot a -> Rep (PRoot a) x
$cfrom :: forall a x. PRoot a -> Rep (PRoot a) x
from :: forall x. PRoot a -> Rep (PRoot a) x
$cto :: forall a x. Rep (PRoot a) x -> PRoot a
to :: forall x. Rep (PRoot a) x -> PRoot a
Generic)
deriving anyclass (Context -> PRoot a -> IO (Maybe ThunkInfo)
Proxy (PRoot a) -> String
(Context -> PRoot a -> IO (Maybe ThunkInfo))
-> (Context -> PRoot a -> IO (Maybe ThunkInfo))
-> (Proxy (PRoot a) -> String)
-> NoThunks (PRoot a)
forall a. NoThunks a => Context -> PRoot a -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Proxy (PRoot a) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall a. NoThunks a => Context -> PRoot a -> IO (Maybe ThunkInfo)
noThunks :: Context -> PRoot a -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall a. NoThunks a => Context -> PRoot a -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PRoot a -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall a. NoThunks a => Proxy (PRoot a) -> String
showTypeOf :: Proxy (PRoot a) -> String
NoThunks, PRoot a -> ()
(PRoot a -> ()) -> NFData (PRoot a)
forall a. NFData a => PRoot a -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall a. NFData a => PRoot a -> ()
rnf :: PRoot a -> ()
NFData, PRoot a
PRoot a -> Default (PRoot a)
forall a. PRoot a
forall a. a -> Default a
$cdef :: forall a. PRoot a
def :: PRoot a
Default)
data PEdges a = PEdges
{ forall a. PEdges a -> StrictMaybe a
peParent :: !(StrictMaybe a)
, forall a. PEdges a -> Set a
peChildren :: !(Set a)
}
deriving stock (Int -> PEdges a -> ShowS
[PEdges a] -> ShowS
PEdges a -> String
(Int -> PEdges a -> ShowS)
-> (PEdges a -> String) -> ([PEdges a] -> ShowS) -> Show (PEdges a)
forall a. Show a => Int -> PEdges a -> ShowS
forall a. Show a => [PEdges a] -> ShowS
forall a. Show a => PEdges a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> PEdges a -> ShowS
showsPrec :: Int -> PEdges a -> ShowS
$cshow :: forall a. Show a => PEdges a -> String
show :: PEdges a -> String
$cshowList :: forall a. Show a => [PEdges a] -> ShowS
showList :: [PEdges a] -> ShowS
Show, PEdges a -> PEdges a -> Bool
(PEdges a -> PEdges a -> Bool)
-> (PEdges a -> PEdges a -> Bool) -> Eq (PEdges a)
forall a. Eq a => PEdges a -> PEdges a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => PEdges a -> PEdges a -> Bool
== :: PEdges a -> PEdges a -> Bool
$c/= :: forall a. Eq a => PEdges a -> PEdges a -> Bool
/= :: PEdges a -> PEdges a -> Bool
Eq, Eq (PEdges a)
Eq (PEdges a) =>
(PEdges a -> PEdges a -> Ordering)
-> (PEdges a -> PEdges a -> Bool)
-> (PEdges a -> PEdges a -> Bool)
-> (PEdges a -> PEdges a -> Bool)
-> (PEdges a -> PEdges a -> Bool)
-> (PEdges a -> PEdges a -> PEdges a)
-> (PEdges a -> PEdges a -> PEdges a)
-> Ord (PEdges a)
PEdges a -> PEdges a -> Bool
PEdges a -> PEdges a -> Ordering
PEdges a -> PEdges a -> PEdges a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (PEdges a)
forall a. Ord a => PEdges a -> PEdges a -> Bool
forall a. Ord a => PEdges a -> PEdges a -> Ordering
forall a. Ord a => PEdges a -> PEdges a -> PEdges a
$ccompare :: forall a. Ord a => PEdges a -> PEdges a -> Ordering
compare :: PEdges a -> PEdges a -> Ordering
$c< :: forall a. Ord a => PEdges a -> PEdges a -> Bool
< :: PEdges a -> PEdges a -> Bool
$c<= :: forall a. Ord a => PEdges a -> PEdges a -> Bool
<= :: PEdges a -> PEdges a -> Bool
$c> :: forall a. Ord a => PEdges a -> PEdges a -> Bool
> :: PEdges a -> PEdges a -> Bool
$c>= :: forall a. Ord a => PEdges a -> PEdges a -> Bool
>= :: PEdges a -> PEdges a -> Bool
$cmax :: forall a. Ord a => PEdges a -> PEdges a -> PEdges a
max :: PEdges a -> PEdges a -> PEdges a
$cmin :: forall a. Ord a => PEdges a -> PEdges a -> PEdges a
min :: PEdges a -> PEdges a -> PEdges a
Ord, (forall x. PEdges a -> Rep (PEdges a) x)
-> (forall x. Rep (PEdges a) x -> PEdges a) -> Generic (PEdges a)
forall x. Rep (PEdges a) x -> PEdges a
forall x. PEdges a -> Rep (PEdges a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (PEdges a) x -> PEdges a
forall a x. PEdges a -> Rep (PEdges a) x
$cfrom :: forall a x. PEdges a -> Rep (PEdges a) x
from :: forall x. PEdges a -> Rep (PEdges a) x
$cto :: forall a x. Rep (PEdges a) x -> PEdges a
to :: forall x. Rep (PEdges a) x -> PEdges a
Generic)
deriving anyclass (Context -> PEdges a -> IO (Maybe ThunkInfo)
Proxy (PEdges a) -> String
(Context -> PEdges a -> IO (Maybe ThunkInfo))
-> (Context -> PEdges a -> IO (Maybe ThunkInfo))
-> (Proxy (PEdges a) -> String)
-> NoThunks (PEdges a)
forall a. NoThunks a => Context -> PEdges a -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Proxy (PEdges a) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall a. NoThunks a => Context -> PEdges a -> IO (Maybe ThunkInfo)
noThunks :: Context -> PEdges a -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall a. NoThunks a => Context -> PEdges a -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PEdges a -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall a. NoThunks a => Proxy (PEdges a) -> String
showTypeOf :: Proxy (PEdges a) -> String
NoThunks, PEdges a -> ()
(PEdges a -> ()) -> NFData (PEdges a)
forall a. NFData a => PEdges a -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall a. NFData a => PEdges a -> ()
rnf :: PEdges a -> ()
NFData, PEdges a
PEdges a -> Default (PEdges a)
forall a. PEdges a
forall a. a -> Default a
$cdef :: forall a. PEdges a
def :: PEdges a
Default)
newtype PGraph a = PGraph
{ forall a. PGraph a -> Map a (PEdges a)
unPGraph :: Map a (PEdges a)
}
deriving stock (Int -> PGraph a -> ShowS
[PGraph a] -> ShowS
PGraph a -> String
(Int -> PGraph a -> ShowS)
-> (PGraph a -> String) -> ([PGraph a] -> ShowS) -> Show (PGraph a)
forall a. Show a => Int -> PGraph a -> ShowS
forall a. Show a => [PGraph a] -> ShowS
forall a. Show a => PGraph a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> PGraph a -> ShowS
showsPrec :: Int -> PGraph a -> ShowS
$cshow :: forall a. Show a => PGraph a -> String
show :: PGraph a -> String
$cshowList :: forall a. Show a => [PGraph a] -> ShowS
showList :: [PGraph a] -> ShowS
Show, PGraph a -> PGraph a -> Bool
(PGraph a -> PGraph a -> Bool)
-> (PGraph a -> PGraph a -> Bool) -> Eq (PGraph a)
forall a. Eq a => PGraph a -> PGraph a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => PGraph a -> PGraph a -> Bool
== :: PGraph a -> PGraph a -> Bool
$c/= :: forall a. Eq a => PGraph a -> PGraph a -> Bool
/= :: PGraph a -> PGraph a -> Bool
Eq, Eq (PGraph a)
Eq (PGraph a) =>
(PGraph a -> PGraph a -> Ordering)
-> (PGraph a -> PGraph a -> Bool)
-> (PGraph a -> PGraph a -> Bool)
-> (PGraph a -> PGraph a -> Bool)
-> (PGraph a -> PGraph a -> Bool)
-> (PGraph a -> PGraph a -> PGraph a)
-> (PGraph a -> PGraph a -> PGraph a)
-> Ord (PGraph a)
PGraph a -> PGraph a -> Bool
PGraph a -> PGraph a -> Ordering
PGraph a -> PGraph a -> PGraph a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (PGraph a)
forall a. Ord a => PGraph a -> PGraph a -> Bool
forall a. Ord a => PGraph a -> PGraph a -> Ordering
forall a. Ord a => PGraph a -> PGraph a -> PGraph a
$ccompare :: forall a. Ord a => PGraph a -> PGraph a -> Ordering
compare :: PGraph a -> PGraph a -> Ordering
$c< :: forall a. Ord a => PGraph a -> PGraph a -> Bool
< :: PGraph a -> PGraph a -> Bool
$c<= :: forall a. Ord a => PGraph a -> PGraph a -> Bool
<= :: PGraph a -> PGraph a -> Bool
$c> :: forall a. Ord a => PGraph a -> PGraph a -> Bool
> :: PGraph a -> PGraph a -> Bool
$c>= :: forall a. Ord a => PGraph a -> PGraph a -> Bool
>= :: PGraph a -> PGraph a -> Bool
$cmax :: forall a. Ord a => PGraph a -> PGraph a -> PGraph a
max :: PGraph a -> PGraph a -> PGraph a
$cmin :: forall a. Ord a => PGraph a -> PGraph a -> PGraph a
min :: PGraph a -> PGraph a -> PGraph a
Ord, (forall x. PGraph a -> Rep (PGraph a) x)
-> (forall x. Rep (PGraph a) x -> PGraph a) -> Generic (PGraph a)
forall x. Rep (PGraph a) x -> PGraph a
forall x. PGraph a -> Rep (PGraph a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (PGraph a) x -> PGraph a
forall a x. PGraph a -> Rep (PGraph a) x
$cfrom :: forall a x. PGraph a -> Rep (PGraph a) x
from :: forall x. PGraph a -> Rep (PGraph a) x
$cto :: forall a x. Rep (PGraph a) x -> PGraph a
to :: forall x. Rep (PGraph a) x -> PGraph a
Generic)
deriving newtype (Context -> PGraph a -> IO (Maybe ThunkInfo)
Proxy (PGraph a) -> String
(Context -> PGraph a -> IO (Maybe ThunkInfo))
-> (Context -> PGraph a -> IO (Maybe ThunkInfo))
-> (Proxy (PGraph a) -> String)
-> NoThunks (PGraph a)
forall a. NoThunks a => Context -> PGraph a -> IO (Maybe ThunkInfo)
forall a. NoThunks a => Proxy (PGraph a) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall a. NoThunks a => Context -> PGraph a -> IO (Maybe ThunkInfo)
noThunks :: Context -> PGraph a -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall a. NoThunks a => Context -> PGraph a -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PGraph a -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall a. NoThunks a => Proxy (PGraph a) -> String
showTypeOf :: Proxy (PGraph a) -> String
NoThunks, PGraph a -> ()
(PGraph a -> ()) -> NFData (PGraph a)
forall a. NFData a => PGraph a -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall a. NFData a => PGraph a -> ()
rnf :: PGraph a -> ()
NFData, PGraph a
PGraph a -> Default (PGraph a)
forall a. PGraph a
forall a. a -> Default a
$cdef :: forall a. PGraph a
def :: PGraph a
Default)
prRootL :: Lens' (PRoot a) (StrictMaybe a)
prRootL :: forall a (f :: * -> *).
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
prRootL = (PRoot a -> StrictMaybe a)
-> (PRoot a -> StrictMaybe a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot ((PRoot a -> StrictMaybe a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a))
-> (PRoot a -> StrictMaybe a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
forall a b. (a -> b) -> a -> b
$ \PRoot a
x StrictMaybe a
y -> PRoot a
x {prRoot = y}
prChildrenL :: Lens' (PRoot a) (Set a)
prChildrenL :: forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
prChildrenL = (PRoot a -> Set a)
-> (PRoot a -> Set a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PRoot a -> Set a
forall a. PRoot a -> Set a
prChildren ((PRoot a -> Set a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a))
-> (PRoot a -> Set a -> PRoot a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
forall a b. (a -> b) -> a -> b
$ \PRoot a
x Set a
y -> PRoot a
x {prChildren = y}
peChildrenL :: Lens' (PEdges a) (Set a)
peChildrenL :: forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a)
peChildrenL = (PEdges a -> Set a)
-> (PEdges a -> Set a -> PEdges a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PEdges a -> Set a
forall a. PEdges a -> Set a
peChildren ((PEdges a -> Set a -> PEdges a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a))
-> (PEdges a -> Set a -> PEdges a)
-> forall {f :: * -> *}.
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a)
forall a b. (a -> b) -> a -> b
$ \PEdges a
x Set a
y -> PEdges a
x {peChildren = y}
pGraphNodesL :: Lens' (PGraph a) (Map a (PEdges a))
pGraphNodesL :: forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL = (PGraph a -> Map a (PEdges a))
-> (PGraph a -> Map a (PEdges a) -> PGraph a)
-> forall {f :: * -> *}.
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PGraph a -> Map a (PEdges a)
forall a. PGraph a -> Map a (PEdges a)
unPGraph ((PGraph a -> Map a (PEdges a) -> PGraph a)
-> forall {f :: * -> *}.
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a))
-> (PGraph a -> Map a (PEdges a) -> PGraph a)
-> forall {f :: * -> *}.
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
forall a b. (a -> b) -> a -> b
$ \PGraph a
x Map a (PEdges a)
y -> PGraph a
x {unPGraph = y}
data Proposals era = Proposals
{ forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps :: !(OMap.OMap GovActionId (GovActionState era))
, forall era. Proposals era -> GovRelation PRoot era
pRoots :: !(GovRelation PRoot era)
, forall era. Proposals era -> GovRelation PGraph era
pGraph :: !(GovRelation PGraph era)
}
deriving stock (Int -> Proposals era -> ShowS
[Proposals era] -> ShowS
Proposals era -> String
(Int -> Proposals era -> ShowS)
-> (Proposals era -> String)
-> ([Proposals era] -> ShowS)
-> Show (Proposals era)
forall era. EraPParams era => Int -> Proposals era -> ShowS
forall era. EraPParams era => [Proposals era] -> ShowS
forall era. EraPParams era => Proposals era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. EraPParams era => Int -> Proposals era -> ShowS
showsPrec :: Int -> Proposals era -> ShowS
$cshow :: forall era. EraPParams era => Proposals era -> String
show :: Proposals era -> String
$cshowList :: forall era. EraPParams era => [Proposals era] -> ShowS
showList :: [Proposals era] -> ShowS
Show, Proposals era -> Proposals era -> Bool
(Proposals era -> Proposals era -> Bool)
-> (Proposals era -> Proposals era -> Bool) -> Eq (Proposals era)
forall era.
EraPParams era =>
Proposals era -> Proposals era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
EraPParams era =>
Proposals era -> Proposals era -> Bool
== :: Proposals era -> Proposals era -> Bool
$c/= :: forall era.
EraPParams era =>
Proposals era -> Proposals era -> Bool
/= :: Proposals era -> Proposals era -> Bool
Eq, (forall x. Proposals era -> Rep (Proposals era) x)
-> (forall x. Rep (Proposals era) x -> Proposals era)
-> Generic (Proposals era)
forall x. Rep (Proposals era) x -> Proposals era
forall x. Proposals era -> Rep (Proposals era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (Proposals era) x -> Proposals era
forall era x. Proposals era -> Rep (Proposals era) x
$cfrom :: forall era x. Proposals era -> Rep (Proposals era) x
from :: forall x. Proposals era -> Rep (Proposals era) x
$cto :: forall era x. Rep (Proposals era) x -> Proposals era
to :: forall x. Rep (Proposals era) x -> Proposals era
Generic)
deriving anyclass (Context -> Proposals era -> IO (Maybe ThunkInfo)
Proxy (Proposals era) -> String
(Context -> Proposals era -> IO (Maybe ThunkInfo))
-> (Context -> Proposals era -> IO (Maybe ThunkInfo))
-> (Proxy (Proposals era) -> String)
-> NoThunks (Proposals era)
forall era.
EraPParams era =>
Context -> Proposals era -> IO (Maybe ThunkInfo)
forall era. EraPParams era => Proxy (Proposals era) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall era.
EraPParams era =>
Context -> Proposals era -> IO (Maybe ThunkInfo)
noThunks :: Context -> Proposals era -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall era.
EraPParams era =>
Context -> Proposals era -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> Proposals era -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall era. EraPParams era => Proxy (Proposals era) -> String
showTypeOf :: Proxy (Proposals era) -> String
NoThunks, Proposals era -> ()
(Proposals era -> ()) -> NFData (Proposals era)
forall era. EraPParams era => Proposals era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. EraPParams era => Proposals era -> ()
rnf :: Proposals era -> ()
NFData, Proposals era
Proposals era -> Default (Proposals era)
forall era. Proposals era
forall a. a -> Default a
$cdef :: forall era. Proposals era
def :: Proposals era
Default)
mapProposals :: (GovActionState era -> GovActionState era) -> Proposals era -> Proposals era
mapProposals :: forall era.
(GovActionState era -> GovActionState era)
-> Proposals era -> Proposals era
mapProposals GovActionState era -> GovActionState era
f Proposals era
props = Proposals era
props {pProps = OMap.mapUnsafe f (pProps props)}
pPropsL :: Lens' (Proposals era) (OMap.OMap GovActionId (GovActionState era))
pPropsL :: forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL = (Proposals era -> OMap GovActionId (GovActionState era))
-> (Proposals era
-> OMap GovActionId (GovActionState era) -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Proposals era -> OMap GovActionId (GovActionState era)
forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps ((Proposals era
-> OMap GovActionId (GovActionState era) -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era))
-> (Proposals era
-> OMap GovActionId (GovActionState era) -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
forall a b. (a -> b) -> a -> b
$ \Proposals era
x OMap GovActionId (GovActionState era)
y -> Proposals era
x {pProps = y}
pRootsL :: Lens' (Proposals era) (GovRelation PRoot era)
pRootsL :: forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL = (Proposals era -> GovRelation PRoot era)
-> (Proposals era -> GovRelation PRoot era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Proposals era -> GovRelation PRoot era
forall era. Proposals era -> GovRelation PRoot era
pRoots ((Proposals era -> GovRelation PRoot era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era))
-> (Proposals era -> GovRelation PRoot era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
forall a b. (a -> b) -> a -> b
$ \Proposals era
x GovRelation PRoot era
y -> Proposals era
x {pRoots = y}
pGraphL :: Lens' (Proposals era) (GovRelation PGraph era)
pGraphL :: forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL = (Proposals era -> GovRelation PGraph era)
-> (Proposals era -> GovRelation PGraph era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Proposals era -> GovRelation PGraph era
forall era. Proposals era -> GovRelation PGraph era
pGraph ((Proposals era -> GovRelation PGraph era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era))
-> (Proposals era -> GovRelation PGraph era -> Proposals era)
-> forall {f :: * -> *}.
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
forall a b. (a -> b) -> a -> b
$ \Proposals era
x GovRelation PGraph era
y -> Proposals era
x {pGraph = y}
instance EraPParams era => ToJSON (Proposals era) where
toJSON :: Proposals era -> Value
toJSON = OMap GovActionId (GovActionState era) -> Value
forall a. ToJSON a => a -> Value
toJSON (OMap GovActionId (GovActionState era) -> Value)
-> (Proposals era -> OMap GovActionId (GovActionState era))
-> Proposals era
-> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proposals era -> OMap GovActionId (GovActionState era)
forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps
toEncoding :: Proposals era -> Encoding
toEncoding = OMap GovActionId (GovActionState era) -> Encoding
forall a. ToJSON a => a -> Encoding
toEncoding (OMap GovActionId (GovActionState era) -> Encoding)
-> (Proposals era -> OMap GovActionId (GovActionState era))
-> Proposals era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proposals era -> OMap GovActionId (GovActionState era)
forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps
proposalsWithPurpose ::
forall p era.
ToGovActionPurpose p =>
(forall f. Lens' (GovRelation f era) (f (GovPurposeId p era))) ->
Proposals era ->
Map (GovPurposeId p era) (GovActionState era)
proposalsWithPurpose :: forall (p :: GovActionPurpose) era.
ToGovActionPurpose p =>
(forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era))
-> Proposals era -> Map (GovPurposeId p era) (GovActionState era)
proposalsWithPurpose forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
propL Proposals {OMap GovActionId (GovActionState era)
pProps :: forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps :: OMap GovActionId (GovActionState era)
pProps, GovRelation PGraph era
pGraph :: forall era. Proposals era -> GovRelation PGraph era
pGraph :: GovRelation PGraph era
pGraph} =
Map (GovPurposeId p era) (GovActionState era)
-> Maybe (Map (GovPurposeId p era) (GovActionState era))
-> Map (GovPurposeId p era) (GovActionState era)
forall a. a -> Maybe a -> a
fromMaybe (Bool
-> Map (GovPurposeId p era) (GovActionState era)
-> Map (GovPurposeId p era) (GovActionState era)
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
False Map (GovPurposeId p era) (GovActionState era)
fallBackMapWithPurpose) (Maybe (Map (GovPurposeId p era) (GovActionState era))
-> Map (GovPurposeId p era) (GovActionState era))
-> Maybe (Map (GovPurposeId p era) (GovActionState era))
-> Map (GovPurposeId p era) (GovActionState era)
forall a b. (a -> b) -> a -> b
$
(GovPurposeId p era
-> PEdges (GovPurposeId p era) -> Maybe (GovActionState era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (Map (GovPurposeId p era) (GovActionState era))
forall (t :: * -> *) k a b.
Applicative t =>
(k -> a -> t b) -> Map k a -> t (Map k b)
Map.traverseWithKey
(\(GovPurposeId GovActionId
govActionId) PEdges (GovPurposeId p era)
_ -> GovActionId
-> OMap GovActionId (GovActionState era)
-> Maybe (GovActionState era)
forall k v. Ord k => k -> OMap k v -> Maybe v
OMap.lookup GovActionId
govActionId OMap GovActionId (GovActionState era)
pProps)
(PGraph (GovPurposeId p era)
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall a. PGraph a -> Map a (PEdges a)
unPGraph (GovRelation PGraph era
pGraph GovRelation PGraph era
-> Getting
(PGraph (GovPurposeId p era))
(GovRelation PGraph era)
(PGraph (GovPurposeId p era))
-> PGraph (GovPurposeId p era)
forall s a. s -> Getting a s a -> a
^. Getting
(PGraph (GovPurposeId p era))
(GovRelation PGraph era)
(PGraph (GovPurposeId p era))
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
propL))
where
fallBackMapWithPurpose :: Map (GovPurposeId p era) (GovActionState era)
fallBackMapWithPurpose :: Map (GovPurposeId p era) (GovActionState era)
fallBackMapWithPurpose =
(GovActionId -> GovPurposeId p era)
-> Map GovActionId (GovActionState era)
-> Map (GovPurposeId p era) (GovActionState era)
forall k1 k2 a. (k1 -> k2) -> Map k1 a -> Map k2 a
Map.mapKeysMonotonic GovActionId -> GovPurposeId p era
forall (p :: GovActionPurpose) era.
GovActionId -> GovPurposeId p era
GovPurposeId (Map GovActionId (GovActionState era)
-> Map (GovPurposeId p era) (GovActionState era))
-> Map GovActionId (GovActionState era)
-> Map (GovPurposeId p era) (GovActionState era)
forall a b. (a -> b) -> a -> b
$
(GovActionState era -> Bool)
-> Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall a k. (a -> Bool) -> Map k a -> Map k a
Map.filter (forall (p :: GovActionPurpose) era.
ToGovActionPurpose p =>
GovAction era -> Bool
isGovActionWithPurpose @p (GovAction era -> Bool)
-> (GovActionState era -> GovAction era)
-> GovActionState era
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProposalProcedure era -> GovAction era
forall era. ProposalProcedure era -> GovAction era
pProcGovAction (ProposalProcedure era -> GovAction era)
-> (GovActionState era -> ProposalProcedure era)
-> GovActionState era
-> GovAction era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GovActionState era -> ProposalProcedure era
forall era. GovActionState era -> ProposalProcedure era
gasProposalProcedure) (OMap GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k v. OMap k v -> Map k v
OMap.toMap OMap GovActionId (GovActionState era)
pProps)
proposalsAddAction ::
forall era.
(EraPParams era, HasCallStack) =>
GovActionState era ->
Proposals era ->
Maybe (Proposals era)
proposalsAddAction :: forall era.
(EraPParams era, ?callStack::CallStack) =>
GovActionState era -> Proposals era -> Maybe (Proposals era)
proposalsAddAction GovActionState era
gas Proposals era
ps = GovActionState era
-> Proposals era -> Proposals era -> Proposals era
forall era.
(EraPParams era, ?callStack::CallStack) =>
GovActionState era
-> Proposals era -> Proposals era -> Proposals era
checkInvariantAfterAddition GovActionState era
gas Proposals era
ps (Proposals era -> Proposals era)
-> Maybe (Proposals era) -> Maybe (Proposals era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> GovActionState era -> Proposals era -> Maybe (Proposals era)
forall era.
GovActionState era -> Proposals era -> Maybe (Proposals era)
runProposalsAddAction GovActionState era
gas Proposals era
ps
runProposalsAddAction ::
forall era.
GovActionState era ->
Proposals era ->
Maybe (Proposals era)
runProposalsAddAction :: forall era.
GovActionState era -> Proposals era -> Maybe (Proposals era)
runProposalsAddAction GovActionState era
gas Proposals era
ps = GovActionState era
-> Maybe (Proposals era)
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Maybe (Proposals era))
-> Maybe (Proposals era)
forall era a.
GovActionState era
-> a
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era) -> GovPurposeId p era -> a)
-> a
withGovActionParent GovActionState era
gas (Proposals era -> Maybe (Proposals era)
forall a. a -> Maybe a
Just Proposals era
psWithGas) (forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Maybe (Proposals era)
forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Maybe (Proposals era)
update
where
psWithGas :: Proposals era
psWithGas = Proposals era
ps Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL ((OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era))
-> (OMap GovActionId (GovActionState era)
-> OMap GovActionId (GovActionState era))
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (OMap GovActionId (GovActionState era)
-> GovActionState era -> OMap GovActionId (GovActionState era)
forall k v. HasOKey k v => OMap k v -> v -> OMap k v
OMap.||> GovActionState era
gas)
update ::
(forall f. Lens' (GovRelation f era) (f (GovPurposeId p era))) ->
StrictMaybe (GovPurposeId p era) ->
GovPurposeId p era ->
Maybe (Proposals era)
update :: forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Maybe (Proposals era)
update forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL StrictMaybe (GovPurposeId p era)
parent GovPurposeId p era
newId
| StrictMaybe (GovPurposeId p era)
parent StrictMaybe (GovPurposeId p era)
-> StrictMaybe (GovPurposeId p era) -> Bool
forall a. Eq a => a -> a -> Bool
== Proposals era
ps Proposals era
-> Getting
(StrictMaybe (GovPurposeId p era))
(Proposals era)
(StrictMaybe (GovPurposeId p era))
-> StrictMaybe (GovPurposeId p era)
forall s a. s -> Getting a s a -> a
^. (GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (StrictMaybe (GovPurposeId p era)) (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (StrictMaybe (GovPurposeId p era)) (Proposals era))
-> ((StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Getting
(StrictMaybe (GovPurposeId p era))
(Proposals era)
(StrictMaybe (GovPurposeId p era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> ((StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> (StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
prRootL =
Proposals era -> Maybe (Proposals era)
forall a. a -> Maybe a
Just (Proposals era -> Maybe (Proposals era))
-> Proposals era -> Maybe (Proposals era)
forall a b. (a -> b) -> a -> b
$
Proposals era
psWithGas
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era))
-> ((Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> (Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> ((Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> (Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era
-> Identity (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
prChildrenL ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> Proposals era -> Identity (Proposals era))
-> (Set (GovPurposeId p era) -> Set (GovPurposeId p era))
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Set (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. Ord a => a -> Set a -> Set a
Set.insert GovPurposeId p era
newId
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era -> Identity (Proposals era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> PEdges (GovPurposeId p era)
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert GovPurposeId p era
newId (StrictMaybe (GovPurposeId p era)
-> Set (GovPurposeId p era) -> PEdges (GovPurposeId p era)
forall a. StrictMaybe a -> Set a -> PEdges a
PEdges StrictMaybe (GovPurposeId p era)
parent Set (GovPurposeId p era)
forall a. Set a
Set.empty)
| SJust GovPurposeId p era
parentId <- StrictMaybe (GovPurposeId p era)
parent
, GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)) -> Bool
forall k a. Ord k => k -> Map k a -> Bool
Map.member GovPurposeId p era
parentId (Map (GovPurposeId p era) (PEdges (GovPurposeId p era)) -> Bool)
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)) -> Bool
forall a b. (a -> b) -> a -> b
$ Proposals era
ps Proposals era
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall s a. s -> Getting a s a -> a
^. (GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL =
Proposals era -> Maybe (Proposals era)
forall a. a -> Maybe a
Just (Proposals era -> Maybe (Proposals era))
-> Proposals era -> Maybe (Proposals era)
forall a b. (a -> b) -> a -> b
$
Proposals era
psWithGas
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL
((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era -> Identity (Proposals era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ ( GovPurposeId p era
-> PEdges (GovPurposeId p era)
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert GovPurposeId p era
newId (StrictMaybe (GovPurposeId p era)
-> Set (GovPurposeId p era) -> PEdges (GovPurposeId p era)
forall a. StrictMaybe a -> Set a -> PEdges a
PEdges (GovPurposeId p era -> StrictMaybe (GovPurposeId p era)
forall a. a -> StrictMaybe a
SJust GovPurposeId p era
parentId) Set (GovPurposeId p era)
forall a. Set a
Set.empty)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PEdges (GovPurposeId p era) -> PEdges (GovPurposeId p era))
-> GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => (a -> a) -> k -> Map k a -> Map k a
Map.adjust ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PEdges (GovPurposeId p era)
-> Identity (PEdges (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a)
peChildrenL ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PEdges (GovPurposeId p era)
-> Identity (PEdges (GovPurposeId p era)))
-> (Set (GovPurposeId p era) -> Set (GovPurposeId p era))
-> PEdges (GovPurposeId p era)
-> PEdges (GovPurposeId p era)
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Set (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. Ord a => a -> Set a -> Set a
Set.insert GovPurposeId p era
newId) GovPurposeId p era
parentId
)
| Bool
otherwise = Maybe (Proposals era)
forall a. Maybe a
Nothing
mkProposals ::
(EraPParams era, MonadFail m) =>
GovRelation StrictMaybe era ->
OMap.OMap GovActionId (GovActionState era) ->
m (Proposals era)
mkProposals :: forall era (m :: * -> *).
(EraPParams era, MonadFail m) =>
GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era) -> m (Proposals era)
mkProposals GovRelation StrictMaybe era
pgais OMap GovActionId (GovActionState era)
omap = do
ps :: Proposals era
ps@(Proposals OMap GovActionId (GovActionState era)
omap' GovRelation PRoot era
_roots GovRelation PGraph era
_hierarchy) <-
(Proposals era -> GovActionState era -> m (Proposals era))
-> Proposals era
-> OMap GovActionId (GovActionState era)
-> m (Proposals era)
forall (t :: * -> *) (m :: * -> *) ans k.
(Foldable t, Monad m) =>
(ans -> k -> m ans) -> ans -> t k -> m ans
foldlM'
( \Proposals era
props GovActionState era
gas ->
case GovActionState era -> Proposals era -> Maybe (Proposals era)
forall era.
(EraPParams era, ?callStack::CallStack) =>
GovActionState era -> Proposals era -> Maybe (Proposals era)
proposalsAddAction GovActionState era
gas Proposals era
props of
Maybe (Proposals era)
Nothing -> String -> m (Proposals era)
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m (Proposals era)) -> String -> m (Proposals era)
forall a b. (a -> b) -> a -> b
$ String
"mkProposals: Could not add a proposal" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> GovActionId -> String
forall a. Show a => a -> String
show (GovActionState era
gas GovActionState era
-> Getting GovActionId (GovActionState era) GovActionId
-> GovActionId
forall s a. s -> Getting a s a -> a
^. Getting GovActionId (GovActionState era) GovActionId
forall era (f :: * -> *).
Functor f =>
(GovActionId -> f GovActionId)
-> GovActionState era -> f (GovActionState era)
gasIdL)
Just Proposals era
props' -> Proposals era -> m (Proposals era)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Proposals era
props'
)
Proposals era
initialProposals
OMap GovActionId (GovActionState era)
omap
Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (OMap GovActionId (GovActionState era)
omap OMap GovActionId (GovActionState era)
-> OMap GovActionId (GovActionState era) -> Bool
forall a. Eq a => a -> a -> Bool
== OMap GovActionId (GovActionState era)
omap') (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$ String -> m ()
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"mkProposals: OMap is malformed"
Proposals era -> m (Proposals era)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Proposals era
ps
where
initialProposals :: Proposals era
initialProposals = Proposals era
forall a. Default a => a
def Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era))
-> GovRelation PRoot era -> Proposals era -> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ GovRelation StrictMaybe era -> GovRelation PRoot era
forall era. GovRelation StrictMaybe era -> GovRelation PRoot era
fromPrevGovActionIds GovRelation StrictMaybe era
pgais
unsafeMkProposals ::
(HasCallStack, EraPParams era) =>
GovRelation StrictMaybe era ->
OMap.OMap GovActionId (GovActionState era) ->
Proposals era
unsafeMkProposals :: forall era.
(?callStack::CallStack, EraPParams era) =>
GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era) -> Proposals era
unsafeMkProposals GovRelation StrictMaybe era
pgais OMap GovActionId (GovActionState era)
omap = (Proposals era -> GovActionState era -> Proposals era)
-> Proposals era
-> OMap GovActionId (GovActionState era)
-> Proposals era
forall b a. (b -> a -> b) -> b -> OMap GovActionId a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' Proposals era -> GovActionState era -> Proposals era
forall {era}.
(Assert
(OrdCond
(CmpNat (ProtVerLow era) (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat 0 (ProtVerLow era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat 0 (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
EraPParams era) =>
Proposals era -> GovActionState era -> Proposals era
unsafeProposalsAddAction Proposals era
initialProposals OMap GovActionId (GovActionState era)
omap
where
initialProposals :: Proposals era
initialProposals = Proposals era
forall a. Default a => a
def Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era))
-> GovRelation PRoot era -> Proposals era -> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ GovRelation StrictMaybe era -> GovRelation PRoot era
forall era. GovRelation StrictMaybe era -> GovRelation PRoot era
fromPrevGovActionIds GovRelation StrictMaybe era
pgais
unsafeProposalsAddAction :: Proposals era -> GovActionState era -> Proposals era
unsafeProposalsAddAction Proposals era
ps GovActionState era
gas =
case GovActionState era -> Proposals era -> Maybe (Proposals era)
forall era.
GovActionState era -> Proposals era -> Maybe (Proposals era)
runProposalsAddAction GovActionState era
gas Proposals era
ps of
Just Proposals era
p -> Proposals era
p
Maybe (Proposals era)
Nothing ->
String -> Proposals era
forall a. (?callStack::CallStack) => String -> a
error (String -> Proposals era) -> String -> Proposals era
forall a b. (a -> b) -> a -> b
$
Context -> String
unlines
[ String
"unsafeMkProposals: runProposalsAddAction failed for " String -> ShowS
forall a. [a] -> [a] -> [a]
++ GovActionId -> String
forall a. Show a => a -> String
show (GovActionState era
gas GovActionState era
-> Getting GovActionId (GovActionState era) GovActionId
-> GovActionId
forall s a. s -> Getting a s a -> a
^. Getting GovActionId (GovActionState era) GovActionId
forall era (f :: * -> *).
Functor f =>
(GovActionId -> f GovActionId)
-> GovActionState era -> f (GovActionState era)
gasIdL)
, String
"Proposals:"
, Proposals era -> String
forall a. Show a => a -> String
show Proposals era
ps
, String
"GovActionState:"
, GovActionState era -> String
forall a. Show a => a -> String
show GovActionState era
gas
]
instance EraPParams era => EncCBOR (Proposals era) where
encCBOR :: Proposals era -> Encoding
encCBOR Proposals era
ps =
let roots :: GovRelation StrictMaybe era
roots = GovRelation PRoot era -> GovRelation StrictMaybe era
forall era. GovRelation PRoot era -> GovRelation StrictMaybe era
toPrevGovActionIds (GovRelation PRoot era -> GovRelation StrictMaybe era)
-> GovRelation PRoot era -> GovRelation StrictMaybe era
forall a b. (a -> b) -> a -> b
$ Proposals era
ps Proposals era
-> Getting
(GovRelation PRoot era) (Proposals era) (GovRelation PRoot era)
-> GovRelation PRoot era
forall s a. s -> Getting a s a -> a
^. Getting
(GovRelation PRoot era) (Proposals era) (GovRelation PRoot era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL
in (GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
-> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR (GovRelation StrictMaybe era
roots, Proposals era
ps Proposals era
-> Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
-> OMap GovActionId (GovActionState era)
forall s a. s -> Getting a s a -> a
^. Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL)
instance EraPParams era => DecCBOR (Proposals era) where
decCBOR :: forall s. Decoder s (Proposals era)
decCBOR = Decoder
s
(GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
forall s.
Decoder
s
(GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
forall a s. DecCBOR a => Decoder s a
decCBOR Decoder
s
(GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
-> ((GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
-> Decoder s (Proposals era))
-> Decoder s (Proposals era)
forall a b. Decoder s a -> (a -> Decoder s b) -> Decoder s b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era)
-> Decoder s (Proposals era))
-> (GovRelation StrictMaybe era,
OMap GovActionId (GovActionState era))
-> Decoder s (Proposals era)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era)
-> Decoder s (Proposals era)
forall era (m :: * -> *).
(EraPParams era, MonadFail m) =>
GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era) -> m (Proposals era)
mkProposals
instance EraPParams era => DecShareCBOR (Proposals era) where
type
Share (Proposals era) =
( Interns (Credential 'Staking)
, Interns (KeyHash 'StakePool)
, Interns (Credential 'DRepRole)
, Interns (Credential 'HotCommitteeRole)
)
decSharePlusCBOR :: forall s.
StateT (Share (Proposals era)) (Decoder s) (Proposals era)
decSharePlusCBOR = do
Text
-> (Proposals era -> Int)
-> StateT (Share (Proposals era)) (Decoder s) (Proposals era)
-> StateT (Share (Proposals era)) (Decoder s) (Proposals era)
forall (m :: (* -> *) -> * -> *) s a.
(MonadTrans m, Monad (m (Decoder s))) =>
Text -> (a -> Int) -> m (Decoder s) a -> m (Decoder s) a
decodeRecordNamedT Text
"Proposals" (Int -> Proposals era -> Int
forall a b. a -> b -> a
const Int
2) (StateT (Share (Proposals era)) (Decoder s) (Proposals era)
-> StateT (Share (Proposals era)) (Decoder s) (Proposals era))
-> StateT (Share (Proposals era)) (Decoder s) (Proposals era)
-> StateT (Share (Proposals era)) (Decoder s) (Proposals era)
forall a b. (a -> b) -> a -> b
$ do
GovRelation StrictMaybe era
gaid <- Decoder s (GovRelation StrictMaybe era)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(GovRelation StrictMaybe era)
forall (m :: * -> *) a.
Monad m =>
m a
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Decoder s (GovRelation StrictMaybe era)
forall s. Decoder s (GovRelation StrictMaybe era)
forall a s. DecCBOR a => Decoder s a
decCBOR
(Int
_, OMap GovActionId (GovActionState era)
omap) <- StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Maybe Int)
-> (GovActionState era
-> OMap GovActionId (GovActionState era)
-> OMap GovActionId (GovActionState era))
-> (OMap GovActionId (GovActionState era)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(GovActionState era))
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Int, OMap GovActionId (GovActionState era))
forall (t :: (* -> *) -> * -> *) s a b.
(MonadTrans t, Monad (t (Decoder s)), Monoid b) =>
t (Decoder s) (Maybe Int)
-> (a -> b -> b)
-> (b -> t (Decoder s) a)
-> t (Decoder s) (Int, b)
decodeListLikeWithCountT (Decoder s (Maybe Int)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Maybe Int)
forall (m :: * -> *) a.
Monad m =>
m a
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Decoder s (Maybe Int)
forall s. Decoder s (Maybe Int)
decodeListLenOrIndef) ((OMap GovActionId (GovActionState era)
-> GovActionState era -> OMap GovActionId (GovActionState era))
-> GovActionState era
-> OMap GovActionId (GovActionState era)
-> OMap GovActionId (GovActionState era)
forall a b c. (a -> b -> c) -> b -> a -> c
flip OMap GovActionId (GovActionState era)
-> GovActionState era -> OMap GovActionId (GovActionState era)
forall k v. HasOKey k v => OMap k v -> v -> OMap k v
(OMap.|>)) ((OMap GovActionId (GovActionState era)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(GovActionState era))
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Int, OMap GovActionId (GovActionState era)))
-> (OMap GovActionId (GovActionState era)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(GovActionState era))
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Int, OMap GovActionId (GovActionState era))
forall a b. (a -> b) -> a -> b
$ \OMap GovActionId (GovActionState era)
_ ->
StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(GovActionState era)
StateT
(Share (GovActionState era)) (Decoder s) (GovActionState era)
forall s.
StateT
(Share (GovActionState era)) (Decoder s) (GovActionState era)
forall a s. DecShareCBOR a => StateT (Share a) (Decoder s) a
decSharePlusCBOR
GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era)
-> StateT
(Interns (Credential 'Staking), Interns (KeyHash 'StakePool),
Interns (Credential 'DRepRole),
Interns (Credential 'HotCommitteeRole))
(Decoder s)
(Proposals era)
forall era (m :: * -> *).
(EraPParams era, MonadFail m) =>
GovRelation StrictMaybe era
-> OMap GovActionId (GovActionState era) -> m (Proposals era)
mkProposals GovRelation StrictMaybe era
gaid OMap GovActionId (GovActionState era)
omap
proposalsAddVote ::
Voter ->
Vote ->
GovActionId ->
Proposals era ->
Proposals era
proposalsAddVote :: forall era.
Voter -> Vote -> GovActionId -> Proposals era -> Proposals era
proposalsAddVote Voter
voter Vote
vote GovActionId
gai (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
roots GovRelation PGraph era
hierarchy) =
OMap GovActionId (GovActionState era)
-> GovRelation PRoot era -> GovRelation PGraph era -> Proposals era
forall era.
OMap GovActionId (GovActionState era)
-> GovRelation PRoot era -> GovRelation PGraph era -> Proposals era
Proposals ((GovActionState era -> GovActionState era)
-> GovActionId
-> OMap GovActionId (GovActionState era)
-> OMap GovActionId (GovActionState era)
forall k v. HasOKey k v => (v -> v) -> k -> OMap k v -> OMap k v
OMap.adjust GovActionState era -> GovActionState era
updateVote GovActionId
gai OMap GovActionId (GovActionState era)
omap) GovRelation PRoot era
roots GovRelation PGraph era
hierarchy
where
insertVote ::
Ord k =>
Lens' (GovActionState era) (Map k Vote) ->
k ->
GovActionState era ->
GovActionState era
insertVote :: forall k era.
Ord k =>
Lens' (GovActionState era) (Map k Vote)
-> k -> GovActionState era -> GovActionState era
insertVote Lens' (GovActionState era) (Map k Vote)
l k
k = (Map k Vote -> Identity (Map k Vote))
-> GovActionState era -> Identity (GovActionState era)
Lens' (GovActionState era) (Map k Vote)
l ((Map k Vote -> Identity (Map k Vote))
-> GovActionState era -> Identity (GovActionState era))
-> (Map k Vote -> Map k Vote)
-> GovActionState era
-> GovActionState era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ k -> Vote -> Map k Vote -> Map k Vote
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert k
k Vote
vote
updateVote :: GovActionState era -> GovActionState era
updateVote = case Voter
voter of
DRepVoter Credential 'DRepRole
c -> Lens' (GovActionState era) (Map (Credential 'DRepRole) Vote)
-> Credential 'DRepRole -> GovActionState era -> GovActionState era
forall k era.
Ord k =>
Lens' (GovActionState era) (Map k Vote)
-> k -> GovActionState era -> GovActionState era
insertVote (Map (Credential 'DRepRole) Vote
-> f (Map (Credential 'DRepRole) Vote))
-> GovActionState era -> f (GovActionState era)
forall era (f :: * -> *).
Functor f =>
(Map (Credential 'DRepRole) Vote
-> f (Map (Credential 'DRepRole) Vote))
-> GovActionState era -> f (GovActionState era)
Lens' (GovActionState era) (Map (Credential 'DRepRole) Vote)
gasDRepVotesL Credential 'DRepRole
c
StakePoolVoter KeyHash 'StakePool
kh -> Lens' (GovActionState era) (Map (KeyHash 'StakePool) Vote)
-> KeyHash 'StakePool -> GovActionState era -> GovActionState era
forall k era.
Ord k =>
Lens' (GovActionState era) (Map k Vote)
-> k -> GovActionState era -> GovActionState era
insertVote (Map (KeyHash 'StakePool) Vote
-> f (Map (KeyHash 'StakePool) Vote))
-> GovActionState era -> f (GovActionState era)
forall era (f :: * -> *).
Functor f =>
(Map (KeyHash 'StakePool) Vote
-> f (Map (KeyHash 'StakePool) Vote))
-> GovActionState era -> f (GovActionState era)
Lens' (GovActionState era) (Map (KeyHash 'StakePool) Vote)
gasStakePoolVotesL KeyHash 'StakePool
kh
CommitteeVoter Credential 'HotCommitteeRole
c -> Lens'
(GovActionState era) (Map (Credential 'HotCommitteeRole) Vote)
-> Credential 'HotCommitteeRole
-> GovActionState era
-> GovActionState era
forall k era.
Ord k =>
Lens' (GovActionState era) (Map k Vote)
-> k -> GovActionState era -> GovActionState era
insertVote (Map (Credential 'HotCommitteeRole) Vote
-> f (Map (Credential 'HotCommitteeRole) Vote))
-> GovActionState era -> f (GovActionState era)
forall era (f :: * -> *).
Functor f =>
(Map (Credential 'HotCommitteeRole) Vote
-> f (Map (Credential 'HotCommitteeRole) Vote))
-> GovActionState era -> f (GovActionState era)
Lens'
(GovActionState era) (Map (Credential 'HotCommitteeRole) Vote)
gasCommitteeVotesL Credential 'HotCommitteeRole
c
proposalsRemoveIds ::
forall era.
EraPParams era =>
Set GovActionId ->
Proposals era ->
(Proposals era, Map.Map GovActionId (GovActionState era))
proposalsRemoveIds :: forall era.
EraPParams era =>
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveIds Set GovActionId
gais Proposals era
ps =
let (OMap GovActionId (GovActionState era)
retainedOMap, Map GovActionId (GovActionState era)
removedFromOMap) = Set GovActionId
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall k v. Ord k => Set k -> OMap k v -> (OMap k v, Map k v)
OMap.extractKeys Set GovActionId
gais (OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era)))
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall a b. (a -> b) -> a -> b
$ Proposals era
ps Proposals era
-> Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
-> OMap GovActionId (GovActionState era)
forall s a. s -> Getting a s a -> a
^. Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL
(GovRelation PRoot era
roots, GovRelation PGraph era
hierarchy) = ((GovRelation PRoot era, GovRelation PGraph era)
-> GovActionState era
-> (GovRelation PRoot era, GovRelation PGraph era))
-> (GovRelation PRoot era, GovRelation PGraph era)
-> Map GovActionId (GovActionState era)
-> (GovRelation PRoot era, GovRelation PGraph era)
forall b a. (b -> a -> b) -> b -> Map GovActionId a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' (GovRelation PRoot era, GovRelation PGraph era)
-> GovActionState era
-> (GovRelation PRoot era, GovRelation PGraph era)
forall {era}.
(GovRelation PRoot era, GovRelation PGraph era)
-> GovActionState era
-> (GovRelation PRoot era, GovRelation PGraph era)
removeEach (Proposals era
ps Proposals era
-> Getting
(GovRelation PRoot era) (Proposals era) (GovRelation PRoot era)
-> GovRelation PRoot era
forall s a. s -> Getting a s a -> a
^. Getting
(GovRelation PRoot era) (Proposals era) (GovRelation PRoot era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL, Proposals era
ps Proposals era
-> Getting
(GovRelation PGraph era) (Proposals era) (GovRelation PGraph era)
-> GovRelation PGraph era
forall s a. s -> Getting a s a -> a
^. Getting
(GovRelation PGraph era) (Proposals era) (GovRelation PGraph era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL) Map GovActionId (GovActionState era)
removedFromOMap
in (Set GovActionId -> Proposals era -> Proposals era -> Proposals era
forall era.
(EraPParams era, ?callStack::CallStack) =>
Set GovActionId -> Proposals era -> Proposals era -> Proposals era
checkInvariantAfterDeletion Set GovActionId
gais Proposals era
ps (Proposals era -> Proposals era) -> Proposals era -> Proposals era
forall a b. (a -> b) -> a -> b
$ OMap GovActionId (GovActionState era)
-> GovRelation PRoot era -> GovRelation PGraph era -> Proposals era
forall era.
OMap GovActionId (GovActionState era)
-> GovRelation PRoot era -> GovRelation PGraph era -> Proposals era
Proposals OMap GovActionId (GovActionState era)
retainedOMap GovRelation PRoot era
roots GovRelation PGraph era
hierarchy, Map GovActionId (GovActionState era)
removedFromOMap)
where
removeEach :: (GovRelation PRoot era, GovRelation PGraph era)
-> GovActionState era
-> (GovRelation PRoot era, GovRelation PGraph era)
removeEach accum :: (GovRelation PRoot era, GovRelation PGraph era)
accum@(!GovRelation PRoot era
roots, !GovRelation PGraph era
graph) GovActionState era
gas =
GovActionState era
-> (GovRelation PRoot era, GovRelation PGraph era)
-> (forall {p :: GovActionPurpose}.
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (GovRelation PRoot era, GovRelation PGraph era))
-> (GovRelation PRoot era, GovRelation PGraph era)
forall era a.
GovActionState era
-> a
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era) -> GovPurposeId p era -> a)
-> a
withGovActionParent GovActionState era
gas (GovRelation PRoot era, GovRelation PGraph era)
accum ((forall {p :: GovActionPurpose}.
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (GovRelation PRoot era, GovRelation PGraph era))
-> (GovRelation PRoot era, GovRelation PGraph era))
-> (forall {p :: GovActionPurpose}.
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (GovRelation PRoot era, GovRelation PGraph era))
-> (GovRelation PRoot era, GovRelation PGraph era)
forall a b. (a -> b) -> a -> b
$ \forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL StrictMaybe (GovPurposeId p era)
parent GovPurposeId p era
gpi ->
if StrictMaybe (GovPurposeId p era)
parent StrictMaybe (GovPurposeId p era)
-> StrictMaybe (GovPurposeId p era) -> Bool
forall a. Eq a => a -> a -> Bool
== GovRelation PRoot era
roots GovRelation PRoot era
-> Getting
(StrictMaybe (GovPurposeId p era))
(GovRelation PRoot era)
(StrictMaybe (GovPurposeId p era))
-> StrictMaybe (GovPurposeId p era)
forall s a. s -> Getting a s a -> a
^. (PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> ((StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> Getting
(StrictMaybe (GovPurposeId p era))
(GovRelation PRoot era)
(StrictMaybe (GovPurposeId p era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
prRootL
then
( GovRelation PRoot era
roots GovRelation PRoot era
-> (GovRelation PRoot era -> GovRelation PRoot era)
-> GovRelation PRoot era
forall a b. a -> (a -> b) -> b
& (PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> ((Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> (Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era
-> Identity (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
prChildrenL ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> (Set (GovPurposeId p era) -> Set (GovPurposeId p era))
-> GovRelation PRoot era
-> GovRelation PRoot era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Set (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. Ord a => a -> Set a -> Set a
Set.delete GovPurposeId p era
gpi
, GovRelation PGraph era
graph GovRelation PGraph era
-> (GovRelation PGraph era -> GovRelation PGraph era)
-> GovRelation PGraph era
forall a b. a -> (a -> b) -> b
& (PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> GovRelation PGraph era
-> GovRelation PGraph era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete GovPurposeId p era
gpi
)
else
( GovRelation PRoot era
roots
, GovRelation PGraph era
graph
GovRelation PGraph era
-> (GovRelation PGraph era -> GovRelation PGraph era)
-> GovRelation PGraph era
forall a b. a -> (a -> b) -> b
& (PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> GovRelation PGraph era
-> GovRelation PGraph era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete GovPurposeId p era
gpi
GovRelation PGraph era
-> (GovRelation PGraph era -> GovRelation PGraph era)
-> GovRelation PGraph era
forall a b. a -> (a -> b) -> b
& case StrictMaybe (GovPurposeId p era)
parent of
StrictMaybe (GovPurposeId p era)
SNothing -> Bool
-> (GovRelation PGraph era -> GovRelation PGraph era)
-> GovRelation PGraph era
-> GovRelation PGraph era
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
False GovRelation PGraph era -> GovRelation PGraph era
forall a. a -> a
id
SJust GovPurposeId p era
parentGpi ->
(PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> GovRelation PGraph era
-> GovRelation PGraph era
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (PEdges (GovPurposeId p era) -> PEdges (GovPurposeId p era))
-> GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => (a -> a) -> k -> Map k a -> Map k a
Map.adjust ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PEdges (GovPurposeId p era)
-> Identity (PEdges (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PEdges a -> f (PEdges a)
peChildrenL ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PEdges (GovPurposeId p era)
-> Identity (PEdges (GovPurposeId p era)))
-> (Set (GovPurposeId p era) -> Set (GovPurposeId p era))
-> PEdges (GovPurposeId p era)
-> PEdges (GovPurposeId p era)
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ GovPurposeId p era
-> Set (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. Ord a => a -> Set a -> Set a
Set.delete GovPurposeId p era
gpi) GovPurposeId p era
parentGpi
)
proposalsRemoveWithDescendants ::
EraPParams era =>
Set GovActionId ->
Proposals era ->
(Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveWithDescendants :: forall era.
EraPParams era =>
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveWithDescendants Set GovActionId
gais ps :: Proposals era
ps@(Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_roots GovRelation PGraph era
graph) =
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
forall era.
EraPParams era =>
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveIds (Set GovActionId
gais Set GovActionId -> Set GovActionId -> Set GovActionId
forall a. Semigroup a => a -> a -> a
<> (GovActionId -> Set GovActionId)
-> Set GovActionId -> Set GovActionId
forall m a. Monoid m => (a -> m) -> Set a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap GovActionId -> Set GovActionId
getAllDescendants Set GovActionId
gais) Proposals era
ps
where
getAllDescendants :: GovActionId -> Set GovActionId
getAllDescendants GovActionId
gai =
case GovActionId
-> OMap GovActionId (GovActionState era)
-> Maybe (GovActionState era)
forall k v. Ord k => k -> OMap k v -> Maybe v
OMap.lookup GovActionId
gai OMap GovActionId (GovActionState era)
omap of
Maybe (GovActionState era)
Nothing -> Bool -> Set GovActionId -> Set GovActionId
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
False Set GovActionId
forall a. Monoid a => a
mempty
Just GovActionState era
gas -> GovActionState era
-> Set GovActionId
-> (forall {p :: GovActionPurpose}.
(forall {f1 :: * -> *} {f2 :: * -> *}.
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Set GovActionId)
-> Set GovActionId
forall era a.
GovActionState era
-> a
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era) -> GovPurposeId p era -> a)
-> a
withGovActionParent GovActionState era
gas Set GovActionId
forall a. Monoid a => a
mempty ((forall {p :: GovActionPurpose}.
(forall {f1 :: * -> *} {f2 :: * -> *}.
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Set GovActionId)
-> Set GovActionId)
-> (forall {p :: GovActionPurpose}.
(forall {f1 :: * -> *} {f2 :: * -> *}.
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> Set GovActionId)
-> Set GovActionId
forall a b. (a -> b) -> a -> b
$ \forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL StrictMaybe (GovPurposeId p era)
_ ->
let go :: Set GovActionId -> GovPurposeId p era -> Set GovActionId
go Set GovActionId
acc GovPurposeId p era
gpi =
case GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup GovPurposeId p era
gpi (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era))
forall a b. (a -> b) -> a -> b
$ GovRelation PGraph era
graph GovRelation PGraph era
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall s a. s -> Getting a s a -> a
^. (PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL of
Maybe (PEdges (GovPurposeId p era))
Nothing -> Bool -> Set GovActionId -> Set GovActionId
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
False Set GovActionId
acc
Just (PEdges StrictMaybe (GovPurposeId p era)
_parent Set (GovPurposeId p era)
children) ->
(Set GovActionId -> GovPurposeId p era -> Set GovActionId)
-> Set GovActionId -> Set (GovPurposeId p era) -> Set GovActionId
forall b a. (b -> a -> b) -> b -> Set a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' Set GovActionId -> GovPurposeId p era -> Set GovActionId
go ((GovPurposeId p era -> GovActionId)
-> Set (GovPurposeId p era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId p era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId Set (GovPurposeId p era)
children Set GovActionId -> Set GovActionId -> Set GovActionId
forall a. Semigroup a => a -> a -> a
<> Set GovActionId
acc) Set (GovPurposeId p era)
children
in Set GovActionId -> GovPurposeId p era -> Set GovActionId
go Set GovActionId
forall a. Monoid a => a
mempty
proposalsApplyEnactment ::
forall era.
EraPParams era =>
Seq (GovActionState era) ->
Set GovActionId ->
Proposals era ->
( Proposals era
, Map GovActionId (GovActionState era)
, Map GovActionId (GovActionState era)
, Map GovActionId (GovActionState era)
)
proposalsApplyEnactment :: forall era.
EraPParams era =>
Seq (GovActionState era)
-> Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
proposalsApplyEnactment Seq (GovActionState era)
enactedGass Set GovActionId
expiredGais Proposals era
props =
let (Proposals era
unexpiredProposals, Map GovActionId (GovActionState era)
expiredRemoved) = Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
forall era.
EraPParams era =>
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveWithDescendants Set GovActionId
expiredGais Proposals era
props
(Proposals era
enactedProposalsState, Map GovActionId (GovActionState era)
enacted, Map GovActionId (GovActionState era)
removedDueToEnactment) =
((Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> GovActionState era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era)))
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> Seq (GovActionState era)
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall b a. (b -> a -> b) -> b -> Seq a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> GovActionState era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enact (Proposals era
unexpiredProposals, Map GovActionId (GovActionState era)
forall k a. Map k a
Map.empty, Map GovActionId (GovActionState era)
forall k a. Map k a
Map.empty) Seq (GovActionState era)
enactedGass
in (Proposals era
enactedProposalsState, Map GovActionId (GovActionState era)
enacted, Map GovActionId (GovActionState era)
removedDueToEnactment, Map GovActionId (GovActionState era)
expiredRemoved)
where
enact :: (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> GovActionState era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enact (!Proposals era
ps, !Map GovActionId (GovActionState era)
enacted, !Map GovActionId (GovActionState era)
removed) GovActionState era
gas = GovActionState era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era)))
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall era a.
GovActionState era
-> a
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era) -> GovPurposeId p era -> a)
-> a
withGovActionParent GovActionState era
gas (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enactWithoutRoot (forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enactFromRoot
where
gai :: GovActionId
gai = GovActionState era
gas GovActionState era
-> Getting GovActionId (GovActionState era) GovActionId
-> GovActionId
forall s a. s -> Getting a s a -> a
^. Getting GovActionId (GovActionState era) GovActionId
forall era (f :: * -> *).
Functor f =>
(GovActionId -> f GovActionId)
-> GovActionState era -> f (GovActionState era)
gasIdL
enactWithoutRoot ::
( Proposals era
, Map GovActionId (GovActionState era)
, Map GovActionId (GovActionState era)
)
enactWithoutRoot :: (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enactWithoutRoot =
let (OMap GovActionId (GovActionState era)
newOMap, Map GovActionId (GovActionState era)
enactedAction) = Set GovActionId
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall k v. Ord k => Set k -> OMap k v -> (OMap k v, Map k v)
OMap.extractKeys (GovActionId -> Set GovActionId
forall a. a -> Set a
Set.singleton GovActionId
gai) (OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era)))
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall a b. (a -> b) -> a -> b
$ Proposals era
ps Proposals era
-> Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
-> OMap GovActionId (GovActionState era)
forall s a. s -> Getting a s a -> a
^. Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL
in Bool
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall a. (?callStack::CallStack) => Bool -> a -> a
assert
(Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Map GovActionId (GovActionState era) -> Bool
forall k a. Map k a -> Bool
Map.null Map GovActionId (GovActionState era)
enactedAction)
( Proposals era
ps Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL ((OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era))
-> OMap GovActionId (GovActionState era)
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ OMap GovActionId (GovActionState era)
newOMap
, Map GovActionId (GovActionState era)
enacted Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k a. Ord k => Map k a -> Map k a -> Map k a
`Map.union` Map GovActionId (GovActionState era)
enactedAction
, Map GovActionId (GovActionState era)
removed
)
enactFromRoot ::
(forall f. Lens' (GovRelation f era) (f (GovPurposeId p era))) ->
StrictMaybe (GovPurposeId p era) ->
GovPurposeId p era ->
( Proposals era
, Map GovActionId (GovActionState era)
, Map GovActionId (GovActionState era)
)
enactFromRoot :: forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
enactFromRoot forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL StrictMaybe (GovPurposeId p era)
parent GovPurposeId p era
gpi =
let siblings :: Set GovActionId
siblings =
GovActionId -> Set GovActionId -> Set GovActionId
forall a. Ord a => a -> Set a -> Set a
Set.delete GovActionId
gai (Set GovActionId -> Set GovActionId)
-> Set GovActionId -> Set GovActionId
forall a b. (a -> b) -> a -> b
$
(GovPurposeId p era -> GovActionId)
-> Set (GovPurposeId p era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId p era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId (Proposals era
ps Proposals era
-> Getting
(Set (GovPurposeId p era))
(Proposals era)
(Set (GovPurposeId p era))
-> Set (GovPurposeId p era)
forall s a. s -> Getting a s a -> a
^. (GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (Set (GovPurposeId p era)) (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (Set (GovPurposeId p era)) (Proposals era))
-> ((Set (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (Set (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era))
-> Getting
(Set (GovPurposeId p era))
(Proposals era)
(Set (GovPurposeId p era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era))
-> ((Set (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> (Set (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (Set (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (Set (GovPurposeId p era)) (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const (Set (GovPurposeId p era)) (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
prChildrenL)
newRootChildren :: Set (GovPurposeId p era)
newRootChildren =
case GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup GovPurposeId p era
gpi (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Maybe (PEdges (GovPurposeId p era))
forall a b. (a -> b) -> a -> b
$ Proposals era
ps Proposals era
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall s a. s -> Getting a s a -> a
^. (GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL of
Maybe (PEdges (GovPurposeId p era))
Nothing -> Bool -> Set (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
False Set (GovPurposeId p era)
forall a. Set a
Set.empty
Just PEdges (GovPurposeId p era)
pe -> PEdges (GovPurposeId p era) -> Set (GovPurposeId p era)
forall a. PEdges a -> Set a
peChildren PEdges (GovPurposeId p era)
pe
(Proposals era
withoutSiblings, Map GovActionId (GovActionState era)
removedActions) = Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
forall era.
EraPParams era =>
Set GovActionId
-> Proposals era
-> (Proposals era, Map GovActionId (GovActionState era))
proposalsRemoveWithDescendants Set GovActionId
siblings Proposals era
ps
newGraph :: Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
newGraph = GovPurposeId p era
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete GovPurposeId p era
gpi (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall a b. (a -> b) -> a -> b
$ Proposals era
withoutSiblings Proposals era
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
forall s a. s -> Getting a s a -> a
^. (GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Proposals era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> Getting
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Proposals era)
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Const
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era)))
(PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL
(OMap GovActionId (GovActionState era)
newOMap, Map GovActionId (GovActionState era)
enactedAction) =
Set GovActionId
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall k v. Ord k => Set k -> OMap k v -> (OMap k v, Map k v)
OMap.extractKeys (GovActionId -> Set GovActionId
forall a. a -> Set a
Set.singleton GovActionId
gai) (OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era)))
-> OMap GovActionId (GovActionState era)
-> (OMap GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall a b. (a -> b) -> a -> b
$ Proposals era
withoutSiblings Proposals era
-> Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
-> OMap GovActionId (GovActionState era)
forall s a. s -> Getting a s a -> a
^. Getting
(OMap GovActionId (GovActionState era))
(Proposals era)
(OMap GovActionId (GovActionState era))
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL
newProposals :: Proposals era
newProposals =
Proposals era
withoutSiblings
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era))
-> ((StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> (StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> ((StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> (StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era
-> Identity (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
prRootL ((StrictMaybe (GovPurposeId p era)
-> Identity (StrictMaybe (GovPurposeId p era)))
-> Proposals era -> Identity (Proposals era))
-> StrictMaybe (GovPurposeId p era)
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ GovPurposeId p era -> StrictMaybe (GovPurposeId p era)
forall a. a -> StrictMaybe a
SJust GovPurposeId p era
gpi
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> Proposals era -> Identity (Proposals era))
-> ((Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> (Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era -> Identity (GovRelation PRoot era))
-> ((Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era)))
-> (Set (GovPurposeId p era)
-> Identity (Set (GovPurposeId p era)))
-> GovRelation PRoot era
-> Identity (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Identity (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Set a -> f (Set a)) -> PRoot a -> f (PRoot a)
prChildrenL ((Set (GovPurposeId p era) -> Identity (Set (GovPurposeId p era)))
-> Proposals era -> Identity (Proposals era))
-> Set (GovPurposeId p era) -> Proposals era -> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Set (GovPurposeId p era)
newRootChildren
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PGraph era -> f (GovRelation PGraph era))
-> Proposals era -> f (Proposals era)
pGraphL ((GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> Proposals era -> Identity (Proposals era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era
-> Identity (Proposals era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> GovRelation PGraph era -> Identity (GovRelation PGraph era))
-> ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era)))
-> (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> GovRelation PGraph era
-> Identity (GovRelation PGraph era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> PGraph (GovPurposeId p era)
-> Identity (PGraph (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(Map a (PEdges a) -> f (Map a (PEdges a)))
-> PGraph a -> f (PGraph a)
pGraphNodesL ((Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Identity
(Map (GovPurposeId p era) (PEdges (GovPurposeId p era))))
-> Proposals era -> Identity (Proposals era))
-> Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Map (GovPurposeId p era) (PEdges (GovPurposeId p era))
newGraph
Proposals era -> (Proposals era -> Proposals era) -> Proposals era
forall a b. a -> (a -> b) -> b
& (OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era)
forall era (f :: * -> *).
Functor f =>
(OMap GovActionId (GovActionState era)
-> f (OMap GovActionId (GovActionState era)))
-> Proposals era -> f (Proposals era)
pPropsL ((OMap GovActionId (GovActionState era)
-> Identity (OMap GovActionId (GovActionState era)))
-> Proposals era -> Identity (Proposals era))
-> OMap GovActionId (GovActionState era)
-> Proposals era
-> Proposals era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ OMap GovActionId (GovActionState era)
newOMap
in Bool
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
-> (Proposals era, Map GovActionId (GovActionState era),
Map GovActionId (GovActionState era))
forall a. (?callStack::CallStack) => Bool -> a -> a
assert
(Proposals era
ps Proposals era
-> Getting
(StrictMaybe (GovPurposeId p era))
(Proposals era)
(StrictMaybe (GovPurposeId p era))
-> StrictMaybe (GovPurposeId p era)
forall s a. s -> Getting a s a -> a
^. (GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (StrictMaybe (GovPurposeId p era)) (Proposals era)
forall era (f :: * -> *).
Functor f =>
(GovRelation PRoot era -> f (GovRelation PRoot era))
-> Proposals era -> f (Proposals era)
pRootsL ((GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Proposals era
-> Const (StrictMaybe (GovPurposeId p era)) (Proposals era))
-> ((StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> Getting
(StrictMaybe (GovPurposeId p era))
(Proposals era)
(StrictMaybe (GovPurposeId p era))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era)
forall (f :: * -> *) (f :: * -> *).
Functor f =>
(f (GovPurposeId p era) -> f (f (GovPurposeId p era)))
-> GovRelation f era -> f (GovRelation f era)
govRelationL ((PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const
(StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era))
-> ((StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era)))
-> (StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> GovRelation PRoot era
-> Const (StrictMaybe (GovPurposeId p era)) (GovRelation PRoot era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era))
(StrictMaybe (GovPurposeId p era)))
-> PRoot (GovPurposeId p era)
-> Const
(StrictMaybe (GovPurposeId p era)) (PRoot (GovPurposeId p era))
forall a (f :: * -> *).
Functor f =>
(StrictMaybe a -> f (StrictMaybe a)) -> PRoot a -> f (PRoot a)
prRootL StrictMaybe (GovPurposeId p era)
-> StrictMaybe (GovPurposeId p era) -> Bool
forall a. Eq a => a -> a -> Bool
== StrictMaybe (GovPurposeId p era)
parent)
( Set GovActionId -> Proposals era -> Proposals era -> Proposals era
forall era.
(EraPParams era, ?callStack::CallStack) =>
Set GovActionId -> Proposals era -> Proposals era -> Proposals era
checkInvariantAfterDeletion (GovActionId -> Set GovActionId
forall a. a -> Set a
Set.singleton GovActionId
gai) Proposals era
withoutSiblings Proposals era
newProposals
, Map GovActionId (GovActionState era)
enacted Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k a. Ord k => Map k a -> Map k a -> Map k a
`Map.union` Map GovActionId (GovActionState era)
enactedAction
, Map GovActionId (GovActionState era)
removed Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k a. Ord k => Map k a -> Map k a -> Map k a
`Map.union` Map GovActionId (GovActionState era)
removedActions
)
proposalsActions ::
Proposals era ->
StrictSeq (GovActionState era)
proposalsActions :: forall era. Proposals era -> StrictSeq (GovActionState era)
proposalsActions (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_ GovRelation PGraph era
_) = OMap GovActionId (GovActionState era)
-> StrictSeq (GovActionState era)
forall k v. Ord k => OMap k v -> StrictSeq v
OMap.toStrictSeq OMap GovActionId (GovActionState era)
omap
proposalsDeposits ::
Proposals era ->
Map (Credential 'Staking) (CompactForm Coin)
proposalsDeposits :: forall era.
Proposals era -> Map (Credential 'Staking) (CompactForm Coin)
proposalsDeposits =
(Map (Credential 'Staking) (CompactForm Coin)
-> GovActionState era
-> Map (Credential 'Staking) (CompactForm Coin))
-> Map (Credential 'Staking) (CompactForm Coin)
-> StrictSeq (GovActionState era)
-> Map (Credential 'Staking) (CompactForm Coin)
forall b a. (b -> a -> b) -> b -> StrictSeq a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl'
( \Map (Credential 'Staking) (CompactForm Coin)
gasMap GovActionState era
gas ->
(CompactForm Coin -> CompactForm Coin -> CompactForm Coin)
-> Credential 'Staking
-> CompactForm Coin
-> Map (Credential 'Staking) (CompactForm Coin)
-> Map (Credential 'Staking) (CompactForm Coin)
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
Map.insertWith
CompactForm Coin -> CompactForm Coin -> CompactForm Coin
addCompactCoin
(GovActionState era
gas GovActionState era
-> Getting
(Credential 'Staking) (GovActionState era) (Credential 'Staking)
-> Credential 'Staking
forall s a. s -> Getting a s a -> a
^. (RewardAccount -> Const (Credential 'Staking) RewardAccount)
-> GovActionState era
-> Const (Credential 'Staking) (GovActionState era)
forall era (f :: * -> *).
Functor f =>
(RewardAccount -> f RewardAccount)
-> GovActionState era -> f (GovActionState era)
gasReturnAddrL ((RewardAccount -> Const (Credential 'Staking) RewardAccount)
-> GovActionState era
-> Const (Credential 'Staking) (GovActionState era))
-> ((Credential 'Staking
-> Const (Credential 'Staking) (Credential 'Staking))
-> RewardAccount -> Const (Credential 'Staking) RewardAccount)
-> Getting
(Credential 'Staking) (GovActionState era) (Credential 'Staking)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Credential 'Staking
-> Const (Credential 'Staking) (Credential 'Staking))
-> RewardAccount -> Const (Credential 'Staking) RewardAccount
Lens' RewardAccount (Credential 'Staking)
rewardAccountCredentialL)
(CompactForm Coin -> Maybe (CompactForm Coin) -> CompactForm Coin
forall a. a -> Maybe a -> a
fromMaybe (Word64 -> CompactForm Coin
CompactCoin Word64
0) (Maybe (CompactForm Coin) -> CompactForm Coin)
-> Maybe (CompactForm Coin) -> CompactForm Coin
forall a b. (a -> b) -> a -> b
$ Coin -> Maybe (CompactForm Coin)
forall a. Compactible a => a -> Maybe (CompactForm a)
toCompact (Coin -> Maybe (CompactForm Coin))
-> Coin -> Maybe (CompactForm Coin)
forall a b. (a -> b) -> a -> b
$ GovActionState era
gas GovActionState era
-> Getting Coin (GovActionState era) Coin -> Coin
forall s a. s -> Getting a s a -> a
^. Getting Coin (GovActionState era) Coin
forall era (f :: * -> *).
Functor f =>
(Coin -> f Coin) -> GovActionState era -> f (GovActionState era)
gasDepositL)
Map (Credential 'Staking) (CompactForm Coin)
gasMap
)
Map (Credential 'Staking) (CompactForm Coin)
forall a. Monoid a => a
mempty
(StrictSeq (GovActionState era)
-> Map (Credential 'Staking) (CompactForm Coin))
-> (Proposals era -> StrictSeq (GovActionState era))
-> Proposals era
-> Map (Credential 'Staking) (CompactForm Coin)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proposals era -> StrictSeq (GovActionState era)
forall era. Proposals era -> StrictSeq (GovActionState era)
proposalsActions
proposalsIds ::
Proposals era ->
StrictSeq GovActionId
proposalsIds :: forall era. Proposals era -> StrictSeq GovActionId
proposalsIds (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_ GovRelation PGraph era
_) = OMap GovActionId (GovActionState era) -> StrictSeq GovActionId
forall k v. OMap k v -> StrictSeq k
OMap.toStrictSeqOKeys OMap GovActionId (GovActionState era)
omap
proposalsActionsMap ::
Proposals era ->
Map GovActionId (GovActionState era)
proposalsActionsMap :: forall era. Proposals era -> Map GovActionId (GovActionState era)
proposalsActionsMap (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_ GovRelation PGraph era
_) = OMap GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k v. OMap k v -> Map k v
OMap.toMap OMap GovActionId (GovActionState era)
omap
proposalsSize :: Proposals era -> Int
proposalsSize :: forall era. Proposals era -> Int
proposalsSize (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_ GovRelation PGraph era
_) = OMap GovActionId (GovActionState era) -> Int
forall k v. OMap k v -> Int
OMap.size OMap GovActionId (GovActionState era)
omap
proposalsLookupId ::
GovActionId ->
Proposals era ->
Maybe (GovActionState era)
proposalsLookupId :: forall era.
GovActionId -> Proposals era -> Maybe (GovActionState era)
proposalsLookupId GovActionId
gai (Proposals OMap GovActionId (GovActionState era)
omap GovRelation PRoot era
_ GovRelation PGraph era
_) = GovActionId
-> OMap GovActionId (GovActionState era)
-> Maybe (GovActionState era)
forall k v. Ord k => k -> OMap k v -> Maybe v
OMap.lookup GovActionId
gai OMap GovActionId (GovActionState era)
omap
toPrevGovActionIds :: GovRelation PRoot era -> GovRelation StrictMaybe era
toPrevGovActionIds :: forall era. GovRelation PRoot era -> GovRelation StrictMaybe era
toPrevGovActionIds = (forall a. PRoot a -> StrictMaybe a)
-> GovRelation PRoot era -> GovRelation StrictMaybe era
forall (f :: * -> *) (g :: * -> *) era.
(forall a. f a -> g a) -> GovRelation f era -> GovRelation g era
hoistGovRelation PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot
fromPrevGovActionIds :: GovRelation StrictMaybe era -> GovRelation PRoot era
fromPrevGovActionIds :: forall era. GovRelation StrictMaybe era -> GovRelation PRoot era
fromPrevGovActionIds = (forall a. StrictMaybe a -> PRoot a)
-> GovRelation StrictMaybe era -> GovRelation PRoot era
forall (f :: * -> *) (g :: * -> *) era.
(forall a. f a -> g a) -> GovRelation f era -> GovRelation g era
hoistGovRelation (StrictMaybe a -> Set a -> PRoot a
forall a. StrictMaybe a -> Set a -> PRoot a
`PRoot` Set a
forall a. Set a
Set.empty)
data TreeMaybe a = TreeMaybe {forall a. TreeMaybe a -> Tree (StrictMaybe a)
unTreeMaybe :: Tree (StrictMaybe a)}
deriving (TreeMaybe a -> TreeMaybe a -> Bool
(TreeMaybe a -> TreeMaybe a -> Bool)
-> (TreeMaybe a -> TreeMaybe a -> Bool) -> Eq (TreeMaybe a)
forall a. Eq a => TreeMaybe a -> TreeMaybe a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => TreeMaybe a -> TreeMaybe a -> Bool
== :: TreeMaybe a -> TreeMaybe a -> Bool
$c/= :: forall a. Eq a => TreeMaybe a -> TreeMaybe a -> Bool
/= :: TreeMaybe a -> TreeMaybe a -> Bool
Eq)
instance Show (TreeMaybe (GovPurposeId p era)) where
show :: TreeMaybe (GovPurposeId p era) -> String
show = (String
"\n" String -> ShowS
forall a. Semigroup a => a -> a -> a
<>) ShowS
-> (TreeMaybe (GovPurposeId p era) -> String)
-> TreeMaybe (GovPurposeId p era)
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tree String -> String
drawTree (Tree String -> String)
-> (TreeMaybe (GovPurposeId p era) -> Tree String)
-> TreeMaybe (GovPurposeId p era)
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (GovPurposeId p era) -> String)
-> Tree (StrictMaybe (GovPurposeId p era)) -> Tree String
forall a b. (a -> b) -> Tree a -> Tree b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap StrictMaybe (GovPurposeId p era) -> String
forall {p :: GovActionPurpose} {era}.
StrictMaybe (GovPurposeId p era) -> String
showGovPurposeId (Tree (StrictMaybe (GovPurposeId p era)) -> Tree String)
-> (TreeMaybe (GovPurposeId p era)
-> Tree (StrictMaybe (GovPurposeId p era)))
-> TreeMaybe (GovPurposeId p era)
-> Tree String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TreeMaybe (GovPurposeId p era)
-> Tree (StrictMaybe (GovPurposeId p era))
forall a. TreeMaybe a -> Tree (StrictMaybe a)
unTreeMaybe
where
showGovPurposeId :: StrictMaybe (GovPurposeId p era) -> String
showGovPurposeId = \case
StrictMaybe (GovPurposeId p era)
SNothing -> String
"x"
SJust (GovPurposeId GovActionId
govActionId) -> Text -> String
T.unpack (GovActionId -> Text
govActionIdToText GovActionId
govActionId)
toGovRelationTree :: (Era era, HasCallStack) => Proposals era -> GovRelation TreeMaybe era
toGovRelationTree :: forall era.
(Era era, ?callStack::CallStack) =>
Proposals era -> GovRelation TreeMaybe era
toGovRelationTree = (String -> GovRelation TreeMaybe era)
-> (GovRelation TreeMaybe era -> GovRelation TreeMaybe era)
-> Either String (GovRelation TreeMaybe era)
-> GovRelation TreeMaybe era
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> GovRelation TreeMaybe era
forall a. (?callStack::CallStack) => String -> a
error GovRelation TreeMaybe era -> GovRelation TreeMaybe era
forall a. a -> a
id (Either String (GovRelation TreeMaybe era)
-> GovRelation TreeMaybe era)
-> (Proposals era -> Either String (GovRelation TreeMaybe era))
-> Proposals era
-> GovRelation TreeMaybe era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proposals era -> Either String (GovRelation TreeMaybe era)
forall era.
Era era =>
Proposals era -> Either String (GovRelation TreeMaybe era)
toGovRelationTreeEither
toGovRelationTreeEither :: Era era => Proposals era -> Either String (GovRelation TreeMaybe era)
toGovRelationTreeEither :: forall era.
Era era =>
Proposals era -> Either String (GovRelation TreeMaybe era)
toGovRelationTreeEither Proposals {OMap GovActionId (GovActionState era)
pProps :: forall era. Proposals era -> OMap GovActionId (GovActionState era)
pProps :: OMap GovActionId (GovActionState era)
pProps, GovRelation PRoot era
pRoots :: forall era. Proposals era -> GovRelation PRoot era
pRoots :: GovRelation PRoot era
pRoots, GovRelation PGraph era
pGraph :: forall era. Proposals era -> GovRelation PGraph era
pGraph :: GovRelation PGraph era
pGraph} = do
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (OMap GovActionId (GovActionState era) -> Bool
forall k v. Ord k => OMap k v -> Bool
OMap.invariantHolds' OMap GovActionId (GovActionState era)
pProps) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$ String -> Either String ()
forall a b. a -> Either a b
Left String
"OMap invariant is violated"
let propsMap :: Map GovActionId (GovActionState era)
propsMap = OMap GovActionId (GovActionState era)
-> Map GovActionId (GovActionState era)
forall k v. OMap k v -> Map k v
OMap.toMap OMap GovActionId (GovActionState era)
pProps
childParentRelation :: GovRelation ChildParent era
childParentRelation = Map GovActionId (GovActionState era) -> GovRelation ChildParent era
forall (f :: * -> *) era.
Foldable f =>
f (GovActionState era) -> GovRelation ChildParent era
toChildParentRelation Map GovActionId (GovActionState era)
propsMap
(TreeMaybe (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate, Set (GovPurposeId 'PParamUpdatePurpose era)
nodesPParamUpdate) <-
ChildParent (GovPurposeId 'PParamUpdatePurpose era)
-> PRoot (GovPurposeId 'PParamUpdatePurpose era)
-> PGraph (GovPurposeId 'PParamUpdatePurpose era)
-> Either
String
(TreeMaybe (GovPurposeId 'PParamUpdatePurpose era),
Set (GovPurposeId 'PParamUpdatePurpose era))
forall a.
(Ord a, Show a) =>
ChildParent a
-> PRoot a -> PGraph a -> Either String (TreeMaybe a, Set a)
toPTree (GovRelation ChildParent era
-> ChildParent (GovPurposeId 'PParamUpdatePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate GovRelation ChildParent era
childParentRelation) (GovRelation PRoot era
-> PRoot (GovPurposeId 'PParamUpdatePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate GovRelation PRoot era
pRoots) (GovRelation PGraph era
-> PGraph (GovPurposeId 'PParamUpdatePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate GovRelation PGraph era
pGraph)
(TreeMaybe (GovPurposeId 'HardForkPurpose era)
grHardFork, Set (GovPurposeId 'HardForkPurpose era)
nodesHardFork) <-
ChildParent (GovPurposeId 'HardForkPurpose era)
-> PRoot (GovPurposeId 'HardForkPurpose era)
-> PGraph (GovPurposeId 'HardForkPurpose era)
-> Either
String
(TreeMaybe (GovPurposeId 'HardForkPurpose era),
Set (GovPurposeId 'HardForkPurpose era))
forall a.
(Ord a, Show a) =>
ChildParent a
-> PRoot a -> PGraph a -> Either String (TreeMaybe a, Set a)
toPTree (GovRelation ChildParent era
-> ChildParent (GovPurposeId 'HardForkPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'HardForkPurpose era)
grHardFork GovRelation ChildParent era
childParentRelation) (GovRelation PRoot era -> PRoot (GovPurposeId 'HardForkPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'HardForkPurpose era)
grHardFork GovRelation PRoot era
pRoots) (GovRelation PGraph era
-> PGraph (GovPurposeId 'HardForkPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'HardForkPurpose era)
grHardFork GovRelation PGraph era
pGraph)
(TreeMaybe (GovPurposeId 'CommitteePurpose era)
grCommittee, Set (GovPurposeId 'CommitteePurpose era)
nodesCommittee) <-
ChildParent (GovPurposeId 'CommitteePurpose era)
-> PRoot (GovPurposeId 'CommitteePurpose era)
-> PGraph (GovPurposeId 'CommitteePurpose era)
-> Either
String
(TreeMaybe (GovPurposeId 'CommitteePurpose era),
Set (GovPurposeId 'CommitteePurpose era))
forall a.
(Ord a, Show a) =>
ChildParent a
-> PRoot a -> PGraph a -> Either String (TreeMaybe a, Set a)
toPTree (GovRelation ChildParent era
-> ChildParent (GovPurposeId 'CommitteePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'CommitteePurpose era)
grCommittee GovRelation ChildParent era
childParentRelation) (GovRelation PRoot era -> PRoot (GovPurposeId 'CommitteePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'CommitteePurpose era)
grCommittee GovRelation PRoot era
pRoots) (GovRelation PGraph era
-> PGraph (GovPurposeId 'CommitteePurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'CommitteePurpose era)
grCommittee GovRelation PGraph era
pGraph)
(TreeMaybe (GovPurposeId 'ConstitutionPurpose era)
grConstitution, Set (GovPurposeId 'ConstitutionPurpose era)
nodesConstitution) <-
ChildParent (GovPurposeId 'ConstitutionPurpose era)
-> PRoot (GovPurposeId 'ConstitutionPurpose era)
-> PGraph (GovPurposeId 'ConstitutionPurpose era)
-> Either
String
(TreeMaybe (GovPurposeId 'ConstitutionPurpose era),
Set (GovPurposeId 'ConstitutionPurpose era))
forall a.
(Ord a, Show a) =>
ChildParent a
-> PRoot a -> PGraph a -> Either String (TreeMaybe a, Set a)
toPTree (GovRelation ChildParent era
-> ChildParent (GovPurposeId 'ConstitutionPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'ConstitutionPurpose era)
grConstitution GovRelation ChildParent era
childParentRelation) (GovRelation PRoot era
-> PRoot (GovPurposeId 'ConstitutionPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'ConstitutionPurpose era)
grConstitution GovRelation PRoot era
pRoots) (GovRelation PGraph era
-> PGraph (GovPurposeId 'ConstitutionPurpose era)
forall (f :: * -> *) era.
GovRelation f era -> f (GovPurposeId 'ConstitutionPurpose era)
grConstitution GovRelation PGraph era
pGraph)
let allNodes :: Set GovActionId
allNodes =
[Set GovActionId] -> Set GovActionId
forall (f :: * -> *) a. (Foldable f, Ord a) => f (Set a) -> Set a
Set.unions
[ (GovPurposeId 'PParamUpdatePurpose era -> GovActionId)
-> Set (GovPurposeId 'PParamUpdatePurpose era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId 'PParamUpdatePurpose era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId Set (GovPurposeId 'PParamUpdatePurpose era)
nodesPParamUpdate
, (GovPurposeId 'HardForkPurpose era -> GovActionId)
-> Set (GovPurposeId 'HardForkPurpose era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId 'HardForkPurpose era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId Set (GovPurposeId 'HardForkPurpose era)
nodesHardFork
, (GovPurposeId 'CommitteePurpose era -> GovActionId)
-> Set (GovPurposeId 'CommitteePurpose era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId 'CommitteePurpose era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId Set (GovPurposeId 'CommitteePurpose era)
nodesCommittee
, (GovPurposeId 'ConstitutionPurpose era -> GovActionId)
-> Set (GovPurposeId 'ConstitutionPurpose era) -> Set GovActionId
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map GovPurposeId 'ConstitutionPurpose era -> GovActionId
forall (p :: GovActionPurpose) era.
GovPurposeId p era -> GovActionId
unGovPurposeId Set (GovPurposeId 'ConstitutionPurpose era)
nodesConstitution
]
guardUnknown :: Either String ()
guardUnknown = do
let unknown :: Set GovActionId
unknown = Set GovActionId
allNodes Set GovActionId -> Set GovActionId -> Set GovActionId
forall a. Ord a => Set a -> Set a -> Set a
Set.\\ Map GovActionId (GovActionState era) -> Set GovActionId
forall k a. Map k a -> Set k
Map.keysSet Map GovActionId (GovActionState era)
propsMap
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Set GovActionId -> Bool
forall a. Set a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null Set GovActionId
unknown) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$ do
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$ String
"Discovered unrecognized nodes: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Set GovActionId -> String
forall a. Show a => a -> String
show Set GovActionId
unknown
guardUnique :: Either String ()
guardUnique = do
let sumSizes :: Int
sumSizes =
[Int] -> Int
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum
[ Set (GovPurposeId 'PParamUpdatePurpose era) -> Int
forall a. Set a -> Int
Set.size Set (GovPurposeId 'PParamUpdatePurpose era)
nodesPParamUpdate
, Set (GovPurposeId 'HardForkPurpose era) -> Int
forall a. Set a -> Int
Set.size Set (GovPurposeId 'HardForkPurpose era)
nodesHardFork
, Set (GovPurposeId 'CommitteePurpose era) -> Int
forall a. Set a -> Int
Set.size Set (GovPurposeId 'CommitteePurpose era)
nodesCommittee
, Set (GovPurposeId 'ConstitutionPurpose era) -> Int
forall a. Set a -> Int
Set.size Set (GovPurposeId 'ConstitutionPurpose era)
nodesConstitution
]
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Set GovActionId -> Int
forall a. Set a -> Int
Set.size Set GovActionId
allNodes Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sumSizes) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$ do
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$
String
"Duplicate govActionIds found between different purposes: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (Int
sumSizes Int -> Int -> Int
forall a. Num a => a -> a -> a
- Set GovActionId -> Int
forall a. Set a -> Int
Set.size Set GovActionId
allNodes)
Either String ()
guardUnknown
Either String ()
guardUnique
GovRelation TreeMaybe era
-> Either String (GovRelation TreeMaybe era)
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GovRelation {TreeMaybe (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate :: TreeMaybe (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate :: TreeMaybe (GovPurposeId 'PParamUpdatePurpose era)
grPParamUpdate, TreeMaybe (GovPurposeId 'HardForkPurpose era)
grHardFork :: TreeMaybe (GovPurposeId 'HardForkPurpose era)
grHardFork :: TreeMaybe (GovPurposeId 'HardForkPurpose era)
grHardFork, TreeMaybe (GovPurposeId 'CommitteePurpose era)
grCommittee :: TreeMaybe (GovPurposeId 'CommitteePurpose era)
grCommittee :: TreeMaybe (GovPurposeId 'CommitteePurpose era)
grCommittee, TreeMaybe (GovPurposeId 'ConstitutionPurpose era)
grConstitution :: TreeMaybe (GovPurposeId 'ConstitutionPurpose era)
grConstitution :: TreeMaybe (GovPurposeId 'ConstitutionPurpose era)
grConstitution}
newtype ChildParent a = ChildParent (Map a (StrictMaybe a))
deriving stock (Int -> ChildParent a -> ShowS
[ChildParent a] -> ShowS
ChildParent a -> String
(Int -> ChildParent a -> ShowS)
-> (ChildParent a -> String)
-> ([ChildParent a] -> ShowS)
-> Show (ChildParent a)
forall a. Show a => Int -> ChildParent a -> ShowS
forall a. Show a => [ChildParent a] -> ShowS
forall a. Show a => ChildParent a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> ChildParent a -> ShowS
showsPrec :: Int -> ChildParent a -> ShowS
$cshow :: forall a. Show a => ChildParent a -> String
show :: ChildParent a -> String
$cshowList :: forall a. Show a => [ChildParent a] -> ShowS
showList :: [ChildParent a] -> ShowS
Show)
deriving newtype (ChildParent a -> ChildParent a -> Bool
(ChildParent a -> ChildParent a -> Bool)
-> (ChildParent a -> ChildParent a -> Bool) -> Eq (ChildParent a)
forall a. Eq a => ChildParent a -> ChildParent a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => ChildParent a -> ChildParent a -> Bool
== :: ChildParent a -> ChildParent a -> Bool
$c/= :: forall a. Eq a => ChildParent a -> ChildParent a -> Bool
/= :: ChildParent a -> ChildParent a -> Bool
Eq, NonEmpty (ChildParent a) -> ChildParent a
ChildParent a -> ChildParent a -> ChildParent a
(ChildParent a -> ChildParent a -> ChildParent a)
-> (NonEmpty (ChildParent a) -> ChildParent a)
-> (forall b. Integral b => b -> ChildParent a -> ChildParent a)
-> Semigroup (ChildParent a)
forall b. Integral b => b -> ChildParent a -> ChildParent a
forall a. Ord a => NonEmpty (ChildParent a) -> ChildParent a
forall a. Ord a => ChildParent a -> ChildParent a -> ChildParent a
forall a b.
(Ord a, Integral b) =>
b -> ChildParent a -> ChildParent a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: forall a. Ord a => ChildParent a -> ChildParent a -> ChildParent a
<> :: ChildParent a -> ChildParent a -> ChildParent a
$csconcat :: forall a. Ord a => NonEmpty (ChildParent a) -> ChildParent a
sconcat :: NonEmpty (ChildParent a) -> ChildParent a
$cstimes :: forall a b.
(Ord a, Integral b) =>
b -> ChildParent a -> ChildParent a
stimes :: forall b. Integral b => b -> ChildParent a -> ChildParent a
Semigroup, Semigroup (ChildParent a)
ChildParent a
Semigroup (ChildParent a) =>
ChildParent a
-> (ChildParent a -> ChildParent a -> ChildParent a)
-> ([ChildParent a] -> ChildParent a)
-> Monoid (ChildParent a)
[ChildParent a] -> ChildParent a
ChildParent a -> ChildParent a -> ChildParent a
forall a. Ord a => Semigroup (ChildParent a)
forall a. Ord a => ChildParent a
forall a. Ord a => [ChildParent a] -> ChildParent a
forall a. Ord a => ChildParent a -> ChildParent a -> ChildParent a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: forall a. Ord a => ChildParent a
mempty :: ChildParent a
$cmappend :: forall a. Ord a => ChildParent a -> ChildParent a -> ChildParent a
mappend :: ChildParent a -> ChildParent a -> ChildParent a
$cmconcat :: forall a. Ord a => [ChildParent a] -> ChildParent a
mconcat :: [ChildParent a] -> ChildParent a
Monoid)
toChildParentRelation ::
Foldable f =>
f (GovActionState era) ->
GovRelation ChildParent era
toChildParentRelation :: forall (f :: * -> *) era.
Foldable f =>
f (GovActionState era) -> GovRelation ChildParent era
toChildParentRelation = (GovActionState era -> GovRelation ChildParent era)
-> f (GovActionState era) -> GovRelation ChildParent era
forall m a. Monoid m => (a -> m) -> f a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap GovActionState era -> GovRelation ChildParent era
forall {era}. GovActionState era -> GovRelation ChildParent era
toChildParent
where
toChildParent :: GovActionState era -> GovRelation ChildParent era
toChildParent GovActionState era
gas =
GovActionState era
-> GovRelation ChildParent era
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> GovRelation ChildParent era)
-> GovRelation ChildParent era
forall era a.
GovActionState era
-> a
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era) -> GovPurposeId p era -> a)
-> a
withGovActionParent GovActionState era
gas GovRelation ChildParent era
forall a. Monoid a => a
mempty ((forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> GovRelation ChildParent era)
-> GovRelation ChildParent era)
-> (forall (p :: GovActionPurpose).
(forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era))
-> StrictMaybe (GovPurposeId p era)
-> GovPurposeId p era
-> GovRelation ChildParent era)
-> GovRelation ChildParent era
forall a b. (a -> b) -> a -> b
$ \forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL StrictMaybe (GovPurposeId p era)
parent GovPurposeId p era
_ ->
GovRelation ChildParent era
forall a. Monoid a => a
mempty GovRelation ChildParent era
-> (GovRelation ChildParent era -> GovRelation ChildParent era)
-> GovRelation ChildParent era
forall a b. a -> (a -> b) -> b
& (ChildParent (GovPurposeId p era)
-> Identity (ChildParent (GovPurposeId p era)))
-> GovRelation ChildParent era
-> Identity (GovRelation ChildParent era)
forall (f1 :: * -> *) (f2 :: * -> *).
Functor f2 =>
(f1 (GovPurposeId p era) -> f2 (f1 (GovPurposeId p era)))
-> GovRelation f1 era -> f2 (GovRelation f1 era)
govRelationL ((ChildParent (GovPurposeId p era)
-> Identity (ChildParent (GovPurposeId p era)))
-> GovRelation ChildParent era
-> Identity (GovRelation ChildParent era))
-> ChildParent (GovPurposeId p era)
-> GovRelation ChildParent era
-> GovRelation ChildParent era
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Map (GovPurposeId p era) (StrictMaybe (GovPurposeId p era))
-> ChildParent (GovPurposeId p era)
forall a. Map a (StrictMaybe a) -> ChildParent a
ChildParent (GovPurposeId p era
-> StrictMaybe (GovPurposeId p era)
-> Map (GovPurposeId p era) (StrictMaybe (GovPurposeId p era))
forall k a. k -> a -> Map k a
Map.singleton (GovActionId -> GovPurposeId p era
forall (p :: GovActionPurpose) era.
GovActionId -> GovPurposeId p era
GovPurposeId (GovActionState era
gas GovActionState era
-> Getting GovActionId (GovActionState era) GovActionId
-> GovActionId
forall s a. s -> Getting a s a -> a
^. Getting GovActionId (GovActionState era) GovActionId
forall era (f :: * -> *).
Functor f =>
(GovActionId -> f GovActionId)
-> GovActionState era -> f (GovActionState era)
gasIdL)) StrictMaybe (GovPurposeId p era)
parent)
toPTree ::
(Ord a, Show a) =>
ChildParent a ->
PRoot a ->
PGraph a ->
Either String (TreeMaybe a, Set a)
toPTree :: forall a.
(Ord a, Show a) =>
ChildParent a
-> PRoot a -> PGraph a -> Either String (TreeMaybe a, Set a)
toPTree (ChildParent Map a (StrictMaybe a)
childParent) PRoot a
root (PGraph Map a (PEdges a)
fullGraph) = do
(Map a (PEdges a)
_, Tree (StrictMaybe a)
tree) <- StrictMaybe a
-> Set a
-> Map a (PEdges a)
-> Either String (Map a (PEdges a), Tree (StrictMaybe a))
nodeToTree (PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot PRoot a
root) (PRoot a -> Set a
forall a. PRoot a -> Set a
prChildren PRoot a
root) Map a (PEdges a)
fullGraph
[a]
nodesList <-
case [Either () a] -> ([()], [a])
forall a b. [Either a b] -> ([a], [b])
partitionEithers ([Either () a] -> ([()], [a])) -> [Either () a] -> ([()], [a])
forall a b. (a -> b) -> a -> b
$ (StrictMaybe a -> Either () a) -> [StrictMaybe a] -> [Either () a]
forall a b. (a -> b) -> [a] -> [b]
map (Either () a -> (a -> Either () a) -> StrictMaybe a -> Either () a
forall a b. a -> (b -> a) -> StrictMaybe b -> a
strictMaybe (() -> Either () a
forall a b. a -> Either a b
Left ()) a -> Either () a
forall a b. b -> Either a b
Right) ([StrictMaybe a] -> [Either () a])
-> [StrictMaybe a] -> [Either () a]
forall a b. (a -> b) -> a -> b
$ Tree (StrictMaybe a) -> [StrictMaybe a]
forall a. Tree a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Tree (StrictMaybe a)
tree of
([()]
roots, [a]
nodes)
| StrictMaybe a -> Bool
forall a. StrictMaybe a -> Bool
isSNothing (PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot PRoot a
root) Bool -> Bool -> Bool
&& [()] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [()]
roots ->
String -> Either String [a]
forall a b. a -> Either a b
Left (String -> Either String [a]) -> String -> Either String [a]
forall a b. (a -> b) -> a -> b
$ String
"Expected an empty root, but it was not found in the Tree"
| StrictMaybe a -> Bool
forall a. StrictMaybe a -> Bool
isSJust (PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot PRoot a
root) Bool -> Bool -> Bool
&& Bool -> Bool
not ([()] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [()]
roots) ->
String -> Either String [a]
forall a b. a -> Either a b
Left (String -> Either String [a]) -> String -> Either String [a]
forall a b. (a -> b) -> a -> b
$ String
"Expected a full root, but got " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show ([()] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [()]
roots) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" Nothing cases"
| Bool
otherwise -> [a] -> Either String [a]
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [a]
nodes
let nodes :: Set a
nodes = [a] -> Set a
forall a. Ord a => [a] -> Set a
Set.fromList [a]
nodesList
nodesWithoutRoot :: Set a
nodesWithoutRoot = Set a -> (a -> Set a) -> StrictMaybe a -> Set a
forall a b. a -> (b -> a) -> StrictMaybe b -> a
strictMaybe Set a
nodes (a -> Set a -> Set a
forall a. Ord a => a -> Set a -> Set a
`Set.delete` Set a
nodes) (PRoot a -> StrictMaybe a
forall a. PRoot a -> StrictMaybe a
prRoot PRoot a
root)
unreachable :: Map a (PEdges a)
unreachable = Map a (PEdges a) -> Set a -> Map a (PEdges a)
forall k a. Ord k => Map k a -> Set k -> Map k a
Map.withoutKeys Map a (PEdges a)
fullGraph Set a
nodesWithoutRoot
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Set a -> Int
forall a. Set a -> Int
Set.size Set a
nodes Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
nodesList) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$ do
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$ String
"Detected duplicate nodes: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Set a -> String
forall a. Show a => a -> String
show ((Set a, OSet a) -> Set a
forall a b. (a, b) -> a
fst ((Set a, OSet a) -> Set a) -> (Set a, OSet a) -> Set a
forall a b. (a -> b) -> a -> b
$ [a] -> (Set a, OSet a)
forall (f :: * -> *) a.
(Foldable f, Ord a) =>
f a -> (Set a, OSet a)
OSet.fromFoldableDuplicates [a]
nodesList)
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Map a (PEdges a) -> Bool
forall k a. Map k a -> Bool
Map.null Map a (PEdges a)
unreachable) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$ do
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$ String
"Discovered unreachable nodes in the graph: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Map a (PEdges a) -> String
forall a. Show a => a -> String
show Map a (PEdges a)
unreachable
(TreeMaybe a, Set a) -> Either String (TreeMaybe a, Set a)
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Tree (StrictMaybe a) -> TreeMaybe a
forall a. Tree (StrictMaybe a) -> TreeMaybe a
TreeMaybe Tree (StrictMaybe a)
tree, Set a
nodesWithoutRoot)
where
nodeToTree :: StrictMaybe a
-> Set a
-> Map a (PEdges a)
-> Either String (Map a (PEdges a), Tree (StrictMaybe a))
nodeToTree StrictMaybe a
node Set a
children Map a (PEdges a)
graph = do
(Map a (PEdges a)
graph', [Tree (StrictMaybe a)]
subTrees) <- (a
-> (Map a (PEdges a), [Tree (StrictMaybe a)])
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)]))
-> (Map a (PEdges a), [Tree (StrictMaybe a)])
-> Set a
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> b -> m b) -> b -> t a -> m b
foldrM (StrictMaybe a
-> a
-> (Map a (PEdges a), [Tree (StrictMaybe a)])
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
childToTree StrictMaybe a
node) (Map a (PEdges a)
graph, []) Set a
children
(Map a (PEdges a), Tree (StrictMaybe a))
-> Either String (Map a (PEdges a), Tree (StrictMaybe a))
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Map a (PEdges a)
graph', StrictMaybe a -> [Tree (StrictMaybe a)] -> Tree (StrictMaybe a)
forall a. a -> [Tree a] -> Tree a
Node StrictMaybe a
node [Tree (StrictMaybe a)]
subTrees)
childToTree :: StrictMaybe a
-> a
-> (Map a (PEdges a), [Tree (StrictMaybe a)])
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
childToTree StrictMaybe a
parent a
child (!Map a (PEdges a)
graph, ![Tree (StrictMaybe a)]
acc) =
case a -> Map a (PEdges a) -> Maybe (PEdges a)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup a
child Map a (PEdges a)
graph of
Maybe (PEdges a)
Nothing -> String -> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
forall a b. a -> Either a b
Left (String
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)]))
-> String
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
forall a b. (a -> b) -> a -> b
$ String
"Cannot find the node: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
child
Just PEdges a
edges -> do
Bool -> Either String () -> Either String ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (PEdges a -> StrictMaybe a
forall a. PEdges a -> StrictMaybe a
peParent PEdges a
edges StrictMaybe a -> StrictMaybe a -> Bool
forall a. Eq a => a -> a -> Bool
== StrictMaybe a
parent) (Either String () -> Either String ())
-> Either String () -> Either String ()
forall a b. (a -> b) -> a -> b
$
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$
String
"Incorrect parent: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ StrictMaybe a -> String
forall a. Show a => a -> String
show (PEdges a -> StrictMaybe a
forall a. PEdges a -> StrictMaybe a
peParent PEdges a
edges)
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" listed for the node: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
child
case a -> Map a (StrictMaybe a) -> Maybe (StrictMaybe a)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup a
child Map a (StrictMaybe a)
childParent of
Maybe (StrictMaybe a)
Nothing -> String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$ String
"Node is not found in the governance states map: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
child
Just StrictMaybe a
trueParent
| StrictMaybe a
trueParent StrictMaybe a -> StrictMaybe a -> Bool
forall a. Eq a => a -> a -> Bool
/= StrictMaybe a
parent ->
String -> Either String ()
forall a b. a -> Either a b
Left (String -> Either String ()) -> String -> Either String ()
forall a b. (a -> b) -> a -> b
$
String
"Parent of "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
child
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" specified in the GovAction: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ StrictMaybe a -> String
forall a. Show a => a -> String
show StrictMaybe a
trueParent
String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" does not match the one on the Graph: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ StrictMaybe a -> String
forall a. Show a => a -> String
show StrictMaybe a
parent
| Bool
otherwise -> () -> Either String ()
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
(Map a (PEdges a)
graph', !Tree (StrictMaybe a)
subTree) <-
StrictMaybe a
-> Set a
-> Map a (PEdges a)
-> Either String (Map a (PEdges a), Tree (StrictMaybe a))
nodeToTree (a -> StrictMaybe a
forall a. a -> StrictMaybe a
SJust a
child) (PEdges a -> Set a
forall a. PEdges a -> Set a
peChildren PEdges a
edges) (a -> Map a (PEdges a) -> Map a (PEdges a)
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete a
child Map a (PEdges a)
graph)
(Map a (PEdges a), [Tree (StrictMaybe a)])
-> Either String (Map a (PEdges a), [Tree (StrictMaybe a)])
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Map a (PEdges a)
graph', Tree (StrictMaybe a)
subTree Tree (StrictMaybe a)
-> [Tree (StrictMaybe a)] -> [Tree (StrictMaybe a)]
forall a. a -> [a] -> [a]
: [Tree (StrictMaybe a)]
acc)
checkInvariantAfterAddition ::
(EraPParams era, HasCallStack) =>
GovActionState era ->
Proposals era ->
Proposals era ->
Proposals era
checkInvariantAfterAddition :: forall era.
(EraPParams era, ?callStack::CallStack) =>
GovActionState era
-> Proposals era -> Proposals era -> Proposals era
checkInvariantAfterAddition GovActionState era
gas Proposals era
psPre Proposals era
ps = Bool -> Proposals era -> Proposals era
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
check Proposals era
ps
where
check :: Bool
check =
case Proposals era -> Either String (GovRelation TreeMaybe era)
forall era.
Era era =>
Proposals era -> Either String (GovRelation TreeMaybe era)
toGovRelationTreeEither Proposals era
ps of
Left String
err -> String -> Bool
forall a. (?callStack::CallStack) => String -> a
error (String -> Bool) -> String -> Bool
forall a b. (a -> b) -> a -> b
$ String
"Addition error: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
err String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\n" String -> ShowS
forall a. [a] -> [a] -> [a]
++ GovActionState era -> String
forall a. Show a => a -> String
show GovActionState era
gas String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\n" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proposals era -> String
forall a. Show a => a -> String
show Proposals era
psPre
Right GovRelation TreeMaybe era
_ -> Bool
True
checkInvariantAfterDeletion ::
(EraPParams era, HasCallStack) =>
Set GovActionId ->
Proposals era ->
Proposals era ->
Proposals era
checkInvariantAfterDeletion :: forall era.
(EraPParams era, ?callStack::CallStack) =>
Set GovActionId -> Proposals era -> Proposals era -> Proposals era
checkInvariantAfterDeletion Set GovActionId
gais Proposals era
psPre Proposals era
ps = Bool -> Proposals era -> Proposals era
forall a. (?callStack::CallStack) => Bool -> a -> a
assert Bool
check Proposals era
ps
where
check :: Bool
check =
case Proposals era -> Either String (GovRelation TreeMaybe era)
forall era.
Era era =>
Proposals era -> Either String (GovRelation TreeMaybe era)
toGovRelationTreeEither Proposals era
ps of
Left String
err -> String -> Bool
forall a. (?callStack::CallStack) => String -> a
error (String -> Bool) -> String -> Bool
forall a b. (a -> b) -> a -> b
$ String
"Deletion error: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
err String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\n" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Set GovActionId -> String
forall a. Show a => a -> String
show Set GovActionId
gais String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"\n" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proposals era -> String
forall a. Show a => a -> String
show Proposals era
psPre
Right GovRelation TreeMaybe era
_ -> Bool
True