{-# LANGUAGE TypeOperators #-}

module ZkFold.Base.Protocol.Protostar.ArithmetizableFunction where

import           GHC.Generics             (U1 (..), (:*:) (..))

import           ZkFold.Symbolic.Compiler

data ArithmetizableFunction a i p = ArithmetizableFunction
  { forall a (i :: Type -> Type) (p :: Type -> Type).
ArithmetizableFunction a i p -> i a -> p a -> i a
afEval    :: i a -> p a -> i a
  , forall a (i :: Type -> Type) (p :: Type -> Type).
ArithmetizableFunction a i p -> ArithmeticCircuit a (i :*: p) i U1
afCircuit :: ArithmeticCircuit a (i :*: p) i U1
  }