acme-numbersystem-0.1.0.0: Acme/NumberSystem.hs
{-# LANGUAGE TemplateHaskell, ConstraintKinds #-}
module Acme.NumberSystem where
import GHC.TypeLits
import Language.Haskell.TH
type Less = (<=)
-- | Define the less than relation for numbers up to a number using Template Haskell.
-- | E.g. numberSystem 100
numberSystem :: Integer -> Q [Dec]
numberSystem theBiggestNumber = return . concat $ map (\i -> map (\j ->
InstanceD [] (AppT (AppT (ConT (''Less)) (LitT (NumTyLit i)) ) (LitT (NumTyLit j))) []
) [i..theBiggestNumber]) [1..theBiggestNumber]