acme-numbersystem 0.1.0.0 → 0.2.0.0
raw patch · 2 files changed
+14/−7 lines, 2 files
Files
- Acme/NumberSystem.hs +11/−4
- acme-numbersystem.cabal +3/−3
Acme/NumberSystem.hs view
@@ -1,14 +1,21 @@-{-# LANGUAGE TemplateHaskell, ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell, ConstraintKinds, TypeFamilies, DataKinds, MultiParamTypeClasses #-} module Acme.NumberSystem where import GHC.TypeLits import Language.Haskell.TH type Less = (<=)+type family Sub (m :: Nat) (n :: Nat) :: Nat -- | Define the less than relation for numbers up to a number using Template Haskell.+-- | Also define subtraction. -- | 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]+numberSystem theBiggestNumber = return . concat $ lessThan ++ subs+ where+ lessThan = map (\i -> map (\j ->+ InstanceD [] (AppT (AppT (ConT (''Less)) (LitT (NumTyLit i))) (LitT (NumTyLit j))) []+ ) [i..theBiggestNumber]) [0..theBiggestNumber]+ subs = map (\i -> map (\j ->+ TySynInstD ''Sub [LitT (NumTyLit j), LitT (NumTyLit i)] (LitT (NumTyLit (j - i)))+ ) [i..theBiggestNumber]) [0..theBiggestNumber]
acme-numbersystem.cabal view
@@ -1,7 +1,7 @@ name: acme-numbersystem-version: 0.1.0.0-synopsis: Define the less than relation for numbers up to a number-description: Define the less than relation for numbers up to a number using Template Haskell.+version: 0.2.0.0+synopsis: Define the less than and subtraction for nats+description: Define the less than relation and subtraction for numbers up to a number by using Template Haskell. license: BSD3 license-file: LICENSE author: Maxwell Swadling