{-# LANGUAGE DerivingStrategies #-} module ZkFold.Base.Algebra.Basic.Sources where import Data.Set (Set) import Prelude hiding (replicate) import ZkFold.Base.Algebra.Basic.Class import ZkFold.Prelude newtype Sources a i = Sources { forall {k} (a :: k) i. Sources a i -> Set i runSources :: Set i } deriving newtype (NonEmpty (Sources a i) -> Sources a i Sources a i -> Sources a i -> Sources a i (Sources a i -> Sources a i -> Sources a i) -> (NonEmpty (Sources a i) -> Sources a i) -> (forall b. Integral b => b -> Sources a i -> Sources a i) -> Semigroup (Sources a i) forall b. Integral b => b -> Sources a i -> Sources a i forall a. (a -> a -> a) -> (NonEmpty a -> a) -> (forall b. Integral b => b -> a -> a) -> Semigroup a forall k (a :: k) i. Ord i => NonEmpty (Sources a i) -> Sources a i forall k (a :: k) i. Ord i => Sources a i -> Sources a i -> Sources a i forall k (a :: k) i b. (Ord i, Integral b) => b -> Sources a i -> Sources a i $c<> :: forall k (a :: k) i. Ord i => Sources a i -> Sources a i -> Sources a i <> :: Sources a i -> Sources a i -> Sources a i $csconcat :: forall k (a :: k) i. Ord i => NonEmpty (Sources a i) -> Sources a i sconcat :: NonEmpty (Sources a i) -> Sources a i $cstimes :: forall k (a :: k) i b. (Ord i, Integral b) => b -> Sources a i -> Sources a i stimes :: forall b. Integral b => b -> Sources a i -> Sources a i Semigroup, Semigroup (Sources a i) Sources a i Semigroup (Sources a i) => Sources a i -> (Sources a i -> Sources a i -> Sources a i) -> ([Sources a i] -> Sources a i) -> Monoid (Sources a i) [Sources a i] -> Sources a i Sources a i -> Sources a i -> Sources a i forall a. Semigroup a => a -> (a -> a -> a) -> ([a] -> a) -> Monoid a forall k (a :: k) i. Ord i => Semigroup (Sources a i) forall k (a :: k) i. Ord i => Sources a i forall k (a :: k) i. Ord i => [Sources a i] -> Sources a i forall k (a :: k) i. Ord i => Sources a i -> Sources a i -> Sources a i $cmempty :: forall k (a :: k) i. Ord i => Sources a i mempty :: Sources a i $cmappend :: forall k (a :: k) i. Ord i => Sources a i -> Sources a i -> Sources a i mappend :: Sources a i -> Sources a i -> Sources a i $cmconcat :: forall k (a :: k) i. Ord i => [Sources a i] -> Sources a i mconcat :: [Sources a i] -> Sources a i Monoid) instance MultiplicativeSemigroup c => Exponent (Sources a i) c where ^ :: Sources a i -> c -> Sources a i (^) = Sources a i -> c -> Sources a i forall a b. a -> b -> a const instance MultiplicativeMonoid c => Scale c (Sources a i) where scale :: c -> Sources a i -> Sources a i scale = (Sources a i -> Sources a i) -> c -> Sources a i -> Sources a i forall a b. a -> b -> a const Sources a i -> Sources a i forall a. a -> a id instance Ord i => AdditiveSemigroup (Sources a i) where + :: Sources a i -> Sources a i -> Sources a i (+) = Sources a i -> Sources a i -> Sources a i forall a. Semigroup a => a -> a -> a (<>) instance Ord i => AdditiveMonoid (Sources a i) where zero :: Sources a i zero = Sources a i forall a. Monoid a => a mempty instance Ord i => AdditiveGroup (Sources a i) where negate :: Sources a i -> Sources a i negate = Sources a i -> Sources a i forall a. a -> a id instance Finite a => Finite (Sources a i) where type Order (Sources a i) = Order a instance Ord i => MultiplicativeSemigroup (Sources a i) where * :: Sources a i -> Sources a i -> Sources a i (*) = Sources a i -> Sources a i -> Sources a i forall a. Semigroup a => a -> a -> a (<>) instance Ord i => MultiplicativeMonoid (Sources a i) where one :: Sources a i one = Sources a i forall a. Monoid a => a mempty instance Ord i => MultiplicativeGroup (Sources a i) where invert :: Sources a i -> Sources a i invert = Sources a i -> Sources a i forall a. a -> a id instance Ord i => FromConstant c (Sources a i) where fromConstant :: c -> Sources a i fromConstant c _ = Sources a i forall a. Monoid a => a mempty instance Ord i => Semiring (Sources a i) instance Ord i => Ring (Sources a i) instance Ord i => Field (Sources a i) where finv :: Sources a i -> Sources a i finv = Sources a i -> Sources a i forall a. a -> a id rootOfUnity :: Natural -> Maybe (Sources a i) rootOfUnity Natural _ = Sources a i -> Maybe (Sources a i) forall a. a -> Maybe a Just (Set i -> Sources a i forall {k} (a :: k) i. Set i -> Sources a i Sources Set i forall a. Monoid a => a mempty) instance (Finite a, Ord i) => BinaryExpansion (Sources a i) where binaryExpansion :: Sources a i -> [Sources a i] binaryExpansion = Natural -> Sources a i -> [Sources a i] forall a. Natural -> a -> [a] replicate (forall a. KnownNat (NumberOfBits a) => Natural numberOfBits @a)