{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs #-} {-# LANGUAGE MultiParamTypeClasses, NoMonomorphismRestriction, PolyKinds #-} {-# LANGUAGE ScopedTypeVariables, TypeFamilies, UndecidableInstances #-} module Algebra.Field.Prime.Test where import Algebra.Field.Finite.Test import Algebra.Field.Prime (F) import Data.Reflection (Reifies) import Prelude (Integer, Maybe (..), Monad) import Test.QuickCheck (Arbitrary (..)) import Test.SmallCheck.Series (Serial (..)) instance Reifies p Integer => Arbitrary (F p) where arbitrary :: Gen (F p) arbitrary = Maybe (F p) -> Gen (F p) forall k (proxy :: * -> *). FiniteField k => proxy k -> Gen k arbitraryFiniteField (Maybe (F p) forall a. Maybe a Nothing :: Maybe (F p)) instance (Monad m, Reifies p Integer) => Serial m (F p) where series :: Series m (F p) series = Maybe (F p) -> Series m (F p) forall k (m :: * -> *) (proxy :: * -> *). (FiniteField k, Monad m) => proxy k -> Series m k seriesFiniteField (Maybe (F p) forall a. Maybe a Nothing :: Maybe (F p))