lol-0.3.0.0: utils/Apply/Zq.hs
{-# LANGUAGE ConstraintKinds, DataKinds, FlexibleContexts, FlexibleInstances,
GADTs, MultiParamTypeClasses, NoImplicitPrelude, RankNTypes,
RebindableSyntax, ScopedTypeVariables, TypeFamilies, TypeOperators,
UndecidableInstances #-}
module Apply.Zq
(applyBasic
,LiftedMod(..)
,LiftedInvertible(..)
,Invertible(..)) where
import Apply
import GenArgs
import GenArgs.Zq
import Utils
import Control.Monad.Random
import Crypto.Lol
import Crypto.Lol.CRTrans
data BasicCtxD
type BasicCtx r =
(Field r, Eq r, Random r, Random (ModRep r), ToInteger (ModRep r),
PID (ModRep r), ShowType r, CRTEmbed r, Mod r)
data instance ArgsCtx BasicCtxD where
BC :: (BasicCtx r) => Proxy r -> ArgsCtx BasicCtxD
instance (params `Satisfy` BasicCtxD, BasicCtx r)
=> ( r ': params) `Satisfy` BasicCtxD where
run _ f = f (BC (Proxy::Proxy r)) : run (Proxy::Proxy params) f
applyBasic :: (params `Satisfy` BasicCtxD, MonadRandom rnd) =>
Proxy params
-> (forall r . (BasicCtx r, Generatable rnd r, Generatable rnd (Invertible r))
=> Proxy r -> rnd res)
-> [rnd res]
applyBasic params g = run params $ \(BC p) -> g p