{-# LANGUAGE DataKinds, FlexibleInstances, LiberalTypeSynonyms #-} {-# LANGUAGE MultiParamTypeClasses, TemplateHaskell, TypeSynonymInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Algebra.Field.Galois.Conway (Conway, ConwayPolynomial(..), addConwayPolynomials, conwayFile) where import Algebra.Field.Galois.Internal import Algebra.Prelude.Core import Control.Monad (liftM) import Language.Haskell.TH (runIO) import Language.Haskell.TH (DecsQ) do dat <- tail . init . lines <$> runIO (readFile "data/conway.txt") concat <$> mapM (buildInstance . head . parseLine) dat -- | Macro to add Conway polynomials dictionary. addConwayPolynomials :: [(Integer, Integer, [Integer])] -> DecsQ addConwayPolynomials = liftM concat . mapM buildInstance -- | Parse conway polynomial file and define instances for them. -- File-format must be the same as -- . conwayFile :: FilePath -> DecsQ conwayFile fp = do dat <- tail . init . lines <$> runIO (readFile fp) addConwayPolynomials $ concatMap parseLine dat