refreshed patches
This commit is contained in:
parent
d51d0a344f
commit
92aadb2865
9 changed files with 501 additions and 663 deletions
|
@ -1,17 +1,17 @@
|
|||
From 22c68b43dce437b3c22956f5a968f1b886e60e0c Mon Sep 17 00:00:00 2001
|
||||
From: Joey Hess <joey@kitenet.net>
|
||||
Date: Tue, 17 Dec 2013 19:15:16 +0000
|
||||
From c0f5dcfd6ba7a05bb84b6adc4664c8dde109e6ac Mon Sep 17 00:00:00 2001
|
||||
From: dummy <dummy@example.com>
|
||||
Date: Fri, 7 Mar 2014 04:30:22 +0000
|
||||
Subject: [PATCH] remove TH
|
||||
|
||||
---
|
||||
fast/Data/Reflection.hs | 80 +------------------------------------------------
|
||||
1 file changed, 1 insertion(+), 79 deletions(-)
|
||||
fast/Data/Reflection.hs | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/fast/Data/Reflection.hs b/fast/Data/Reflection.hs
|
||||
index 119d773..cf99efa 100644
|
||||
index ca57d35..d3f8356 100644
|
||||
--- a/fast/Data/Reflection.hs
|
||||
+++ b/fast/Data/Reflection.hs
|
||||
@@ -58,7 +58,7 @@ module Data.Reflection
|
||||
@@ -59,7 +59,7 @@ module Data.Reflection
|
||||
, Given(..)
|
||||
, give
|
||||
-- * Template Haskell reflection
|
||||
|
@ -20,94 +20,40 @@ index 119d773..cf99efa 100644
|
|||
-- * Useful compile time naturals
|
||||
, Z, D, SD, PD
|
||||
) where
|
||||
@@ -151,87 +151,9 @@ instance Reifies n Int => Reifies (PD n) Int where
|
||||
reflect = (\n -> n + n - 1) <$> retagPD reflect
|
||||
{-# INLINE reflect #-}
|
||||
@@ -161,6 +161,7 @@ instance Reifies n Int => Reifies (PD n) Int where
|
||||
-- instead of @$(int 3)@. Sometimes the two will produce the same
|
||||
-- representation (if compiled without the @-DUSE_TYPE_LITS@ preprocessor
|
||||
-- directive).
|
||||
+{-
|
||||
int :: Int -> TypeQ
|
||||
int n = case quotRem n 2 of
|
||||
(0, 0) -> conT ''Z
|
||||
@@ -176,7 +177,7 @@ nat :: Int -> TypeQ
|
||||
nat n
|
||||
| n >= 0 = int n
|
||||
| otherwise = error "nat: negative"
|
||||
-
|
||||
+-}
|
||||
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL < 704
|
||||
instance Show (Q a)
|
||||
instance Eq (Q a)
|
||||
@@ -195,6 +196,7 @@ instance Fractional a => Fractional (Q a) where
|
||||
recip = fmap recip
|
||||
fromRational = return . fromRational
|
||||
|
||||
--- | This can be used to generate a template haskell splice for a type level version of a given 'int'.
|
||||
---
|
||||
--- This does not use GHC TypeLits, instead it generates a numeric type by hand similar to the ones used
|
||||
--- in the \"Functional Pearl: Implicit Configurations\" paper by Oleg Kiselyov and Chung-Chieh Shan.
|
||||
-int :: Int -> TypeQ
|
||||
-int n = case quotRem n 2 of
|
||||
- (0, 0) -> conT ''Z
|
||||
- (q,-1) -> conT ''PD `appT` int q
|
||||
- (q, 0) -> conT ''D `appT` int q
|
||||
- (q, 1) -> conT ''SD `appT` int q
|
||||
- _ -> error "ghc is bad at math"
|
||||
+{-
|
||||
-- | This permits the use of $(5) as a type splice.
|
||||
instance Num Type where
|
||||
#ifdef USE_TYPE_LITS
|
||||
@@ -254,7 +256,7 @@ instance Num Exp where
|
||||
abs = onProxyType1 abs
|
||||
signum = onProxyType1 signum
|
||||
fromInteger n = ConE 'Proxy `SigE` (ConT ''Proxy `AppT` fromInteger n)
|
||||
-
|
||||
--- | This is a restricted version of 'int' that can only generate natural numbers. Attempting to generate
|
||||
--- a negative number results in a compile time error. Also the resulting sequence will consist entirely of
|
||||
--- Z, D, and SD constructors representing the number in zeroless binary.
|
||||
-nat :: Int -> TypeQ
|
||||
-nat n
|
||||
- | n >= 0 = int n
|
||||
- | otherwise = error "nat: negative"
|
||||
-
|
||||
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL < 704
|
||||
-instance Show (Q a)
|
||||
-instance Eq (Q a)
|
||||
-#endif
|
||||
-instance Num a => Num (Q a) where
|
||||
- (+) = liftM2 (+)
|
||||
- (*) = liftM2 (*)
|
||||
- (-) = liftM2 (-)
|
||||
- negate = fmap negate
|
||||
- abs = fmap abs
|
||||
- signum = fmap signum
|
||||
- fromInteger = return . fromInteger
|
||||
-
|
||||
-instance Fractional a => Fractional (Q a) where
|
||||
- (/) = liftM2 (/)
|
||||
- recip = fmap recip
|
||||
- fromRational = return . fromRational
|
||||
-
|
||||
--- | This permits the use of $(5) as a type splice.
|
||||
-instance Num Type where
|
||||
-#ifdef USE_TYPE_LITS
|
||||
- a + b = AppT (AppT (VarT ''(+)) a) b
|
||||
- a * b = AppT (AppT (VarT ''(*)) a) b
|
||||
-#if MIN_VERSION_base(4,8,0)
|
||||
- a - b = AppT (AppT (VarT ''(-)) a) b
|
||||
-#else
|
||||
- (-) = error "Type.(-): undefined"
|
||||
-#endif
|
||||
- fromInteger = LitT . NumTyLit
|
||||
-#else
|
||||
- (+) = error "Type.(+): undefined"
|
||||
- (*) = error "Type.(*): undefined"
|
||||
- (-) = error "Type.(-): undefined"
|
||||
- fromInteger n = case quotRem n 2 of
|
||||
- (0, 0) -> ConT ''Z
|
||||
- (q,-1) -> ConT ''PD `AppT` fromInteger q
|
||||
- (q, 0) -> ConT ''D `AppT` fromInteger q
|
||||
- (q, 1) -> ConT ''SD `AppT` fromInteger q
|
||||
- _ -> error "ghc is bad at math"
|
||||
-#endif
|
||||
- abs = error "Type.abs"
|
||||
- signum = error "Type.signum"
|
||||
-
|
||||
plus, times, minus :: Num a => a -> a -> a
|
||||
plus = (+)
|
||||
times = (*)
|
||||
minus = (-)
|
||||
fract :: Fractional a => a -> a -> a
|
||||
fract = (/)
|
||||
-
|
||||
--- | This permits the use of $(5) as an expression splice.
|
||||
-instance Num Exp where
|
||||
- a + b = AppE (AppE (VarE 'plus) a) b
|
||||
- a * b = AppE (AppE (VarE 'times) a) b
|
||||
- a - b = AppE (AppE (VarE 'minus) a) b
|
||||
- negate = AppE (VarE 'negate)
|
||||
- signum = AppE (VarE 'signum)
|
||||
- abs = AppE (VarE 'abs)
|
||||
- fromInteger = LitE . IntegerL
|
||||
-
|
||||
-instance Fractional Exp where
|
||||
- a / b = AppE (AppE (VarE 'fract) a) b
|
||||
- recip = AppE (VarE 'recip)
|
||||
- fromRational = LitE . RationalL
|
||||
+-}
|
||||
#ifdef USE_TYPE_LITS
|
||||
addProxy :: Proxy a -> Proxy b -> Proxy (a + b)
|
||||
addProxy _ _ = Proxy
|
||||
--
|
||||
1.8.5.1
|
||||
1.9.0
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue