2
2
{-# LANGUAGE FlexibleContexts #-}
3
3
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4
4
{-# LANGUAGE ScopedTypeVariables #-}
5
- {-# LANGUAGE UndecidableInstances #-}
5
+ {-# LANGUAGE StandaloneDeriving #-}
6
+ {-# LANGUAGE TypeFamilies #-}
6
7
7
8
module Cardano.Api.Internal.Tx.UTxO where
8
9
@@ -24,22 +25,25 @@ import Data.Aeson.KeyMap qualified as KeyMap
24
25
import Data.Aeson.Types (Parser )
25
26
import Data.Map (Map )
26
27
import Data.Map qualified as Map
28
+ import Data.MonoTraversable
27
29
import Data.Set (Set )
28
30
import Data.Text (Text )
29
31
import GHC.Exts qualified as GHC
30
32
31
33
newtype UTxO era = UTxO { unUTxO :: Map TxIn (TxOut CtxUTxO era )}
32
34
deriving stock (Eq , Show )
33
- deriving newtype (Semigroup , Monoid , GHC.IsList )
35
+ deriving newtype (Semigroup , Monoid )
36
+
37
+ instance GHC. IsList (UTxO era ) where
38
+ type Item (UTxO era ) = (TxIn , TxOut CtxUTxO era )
39
+ fromList = UTxO . GHC. fromList
40
+ toList = GHC. toList . unUTxO
34
41
35
42
instance IsCardanoEra era => ToJSON (UTxO era ) where
36
43
toJSON (UTxO m) = toJSON m
37
44
toEncoding (UTxO m) = toEncoding m
38
45
39
- instance
40
- IsShelleyBasedEra era
41
- => FromJSON (UTxO era )
42
- where
46
+ instance IsShelleyBasedEra era => FromJSON (UTxO era ) where
43
47
parseJSON = Aeson. withObject " UTxO" $ \ hm -> do
44
48
let l = GHC. toList $ KeyMap. toHashMapText hm
45
49
res <- mapM toTxIn l
@@ -51,6 +55,17 @@ instance
51
55
<$> parseJSON (Aeson. String txinText)
52
56
<*> parseJSON txOutVal
53
57
58
+ type instance Element (UTxO era ) = TxOut CtxUTxO era
59
+
60
+ instance MonoFunctor (UTxO era ) where
61
+ omap f (UTxO utxos) = UTxO $ f <$> utxos
62
+
63
+ deriving newtype instance MonoFoldable (UTxO era )
64
+
65
+ instance MonoTraversable (UTxO era ) where
66
+ otraverse = omapM
67
+ omapM f (UTxO utxos) = UTxO <$> omapM f utxos
68
+
54
69
-- | Infix version of `difference`.
55
70
(\\) :: UTxO era -> UTxO era -> UTxO era
56
71
a \\ b = difference a b
0 commit comments