ivory 0.1.0.6 → 0.1.0.7
raw patch · 4 files changed
+39/−45 lines, 4 filesdep +th-abstractiondep ~template-haskellPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: th-abstraction
Dependency ranges changed: template-haskell
API changes (from Hackage documentation)
- Ivory.Language.Syntax.Concrete.Lexer: alex_actions :: Array Int (AlexAction (Lexer (Maybe Lexeme)))
+ Ivory.Language.Syntax.Concrete.Lexer: instance GHC.Base.Functor Ivory.Language.Syntax.Concrete.Lexer.AlexLastAcc
- Ivory.Language: Proxy :: Proxy
+ Ivory.Language: Proxy :: Proxy k
- Ivory.Language: data Proxy (a :: k)
+ Ivory.Language: data Proxy k (t :: k) :: forall k. k -> *
- Ivory.Language.Proxy: Proxy :: Proxy
+ Ivory.Language.Proxy: Proxy :: Proxy k
- Ivory.Language.Proxy: data Proxy (a :: k)
+ Ivory.Language.Proxy: data Proxy k (t :: k) :: forall k. k -> *
- Ivory.Language.Syntax.Concrete.Lexer: AlexAcc :: Int -> AlexAcc user
+ Ivory.Language.Syntax.Concrete.Lexer: AlexAcc :: a -> AlexAcc a user
- Ivory.Language.Syntax.Concrete.Lexer: AlexAccNone :: AlexAcc user
+ Ivory.Language.Syntax.Concrete.Lexer: AlexAccNone :: AlexAcc a user
- Ivory.Language.Syntax.Concrete.Lexer: AlexAccSkip :: AlexAcc user
+ Ivory.Language.Syntax.Concrete.Lexer: AlexAccSkip :: AlexAcc a user
- Ivory.Language.Syntax.Concrete.Lexer: AlexLastAcc :: !Int -> !AlexInput -> !Int -> AlexLastAcc
+ Ivory.Language.Syntax.Concrete.Lexer: AlexLastAcc :: a -> !AlexInput -> !Int -> AlexLastAcc a
- Ivory.Language.Syntax.Concrete.Lexer: AlexLastSkip :: !AlexInput -> !Int -> AlexLastAcc
+ Ivory.Language.Syntax.Concrete.Lexer: AlexLastSkip :: !AlexInput -> !Int -> AlexLastAcc a
- Ivory.Language.Syntax.Concrete.Lexer: AlexNone :: AlexLastAcc
+ Ivory.Language.Syntax.Concrete.Lexer: AlexNone :: AlexLastAcc a
- Ivory.Language.Syntax.Concrete.Lexer: alex_accept :: Array Int (AlexAcc user)
+ Ivory.Language.Syntax.Concrete.Lexer: alex_accept :: Array Int (AlexAcc (AlexAction (Lexer (Maybe Lexeme))) user)
- Ivory.Language.Syntax.Concrete.Lexer: alex_scan_tkn :: t1 -> t -> Int# -> AlexInput -> Int# -> AlexLastAcc -> (AlexLastAcc, LexerInput)
+ Ivory.Language.Syntax.Concrete.Lexer: alex_scan_tkn :: t1 -> t -> Int# -> AlexInput -> Int# -> AlexLastAcc (AlexAction (Lexer (Maybe Lexeme))) -> (AlexLastAcc (AlexAction (Lexer (Maybe Lexeme))), LexerInput)
- Ivory.Language.Syntax.Concrete.Lexer: data AlexAcc user
+ Ivory.Language.Syntax.Concrete.Lexer: data AlexAcc a user
- Ivory.Language.Syntax.Concrete.Lexer: data AlexLastAcc
+ Ivory.Language.Syntax.Concrete.Lexer: data AlexLastAcc a
- Ivory.Language.Syntax.Concrete.Lexer: quickIndex :: Array Int (AlexAcc (Any *)) -> Int -> AlexAcc (Any *)
+ Ivory.Language.Syntax.Concrete.Lexer: quickIndex :: Array Int (AlexAcc (AlexAction (Lexer (Maybe Lexeme))) (Any *)) -> Int -> AlexAcc (AlexAction (Lexer (Maybe Lexeme))) (Any *)
Files
- ivory.cabal +3/−2
- src/Ivory/Language/Proxy.hs +21/−8
- src/Ivory/Language/Syntax/Concrete/QQ/BitDataQQ.hs +10/−29
- src/Ivory/Language/Syntax/Concrete/QQ/Common.hs +5/−6
ivory.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: ivory-version: 0.1.0.6+version: 0.1.0.7 author: Galois, Inc. maintainer: trevor@galois.com, leepike@galois.com category: Language@@ -87,7 +87,8 @@ pretty >= 1.1, containers >= 0.5, monadLib >= 3.7,- template-haskell >= 2.8,+ template-haskell >= 2.8 && <2.13,+ th-abstraction >=0.2.5 && <0.3, filepath, text, dlist >= 0.5,
src/Ivory/Language/Proxy.hs view
@@ -1,19 +1,32 @@+{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-}-{-# LANGUAGE CPP #-}-{-# LANGUAGE PolyKinds #-} {-# LANGUAGE KindSignatures #-}-{-# LANGUAGE ConstraintKinds #-}--module Ivory.Language.Proxy where+{-# LANGUAGE PolyKinds #-} -import GHC.TypeLits (natVal, symbolVal, Symbol, Nat, KnownNat, KnownSymbol)+module Ivory.Language.Proxy+ (+ -- * Proxy+ Proxy(..)+ , SProxy+ -- * Nat+ , ANat+ , NatType+ , aNat+ , fromTypeNat+ -- * Symbol+ , ASymbol+ , SymbolType+ , aSymbol+ , fromTypeSym+ ) where -data Proxy (a :: k) = Proxy+import Data.Proxy (Proxy (..))+import GHC.TypeLits (KnownNat, KnownSymbol, Nat, Symbol, natVal, symbolVal) -- | Type proxies for * types. type SProxy a = Proxy (a :: *) -type ANat n = (KnownNat n)+type ANat n = KnownNat n type NatType n = Proxy n aNat :: KnownNat n => Proxy n aNat = Proxy
src/Ivory/Language/Syntax/Concrete/QQ/BitDataQQ.hs view
@@ -25,6 +25,7 @@ import Language.Haskell.TH hiding (Exp, Type) import qualified Language.Haskell.TH as TH+import Language.Haskell.TH.Datatype import qualified Ivory.Language.Bits as I import qualified Ivory.Language.Cast as I@@ -37,9 +38,7 @@ import qualified Ivory.Language.BitData.Array as B import qualified Ivory.Language.BitData.BitData as B import qualified Ivory.Language.BitData.Bits as B-#if __GLASGOW_HASKELL__ >= 709 import Ivory.Language.Syntax.Concrete.QQ.Common-#endif import Ivory.Language.Syntax.Concrete.Location import Ivory.Language.Syntax.Concrete.QQ.TypeQQ @@ -325,33 +324,23 @@ , concatMap (mkConstr def) (thDefConstrs def) , mkArraySizeTypeInsts def ]-#if __GLASGOW_HASKELL__ >= 709 ln <- lnPragma (bdLoc d) return (ln ++ defs)-#else- return defs-#endif -- | Generate a newtype definition for a bit data definition. mkDefNewtype :: THDef -> [DecQ] mkDefNewtype def =-#if __GLASGOW_HASKELL__ >= 800- [newtypeD (cxt []) name []- Nothing- (normalC name- [bangType (bang noSourceUnpackedness noSourceStrictness) (return ty)])- (mapM conT+ [newtypeDCompat (cxt []) name [] (normalC name [field]) [ ''I.IvoryType, ''I.IvoryVar, ''I.IvoryExpr , ''I.IvoryEq- , ''I.IvoryInit, ''I.IvoryStore, ''I.IvoryZeroVal ])]-#else- [newtypeD (cxt []) name []- (normalC name [strictType notStrict (return ty)])- [ ''I.IvoryType, ''I.IvoryVar, ''I.IvoryExpr , ''I.IvoryEq- , ''I.IvoryInit, ''I.IvoryStore, ''I.IvoryZeroVal ]]-#endif+ , ''I.IvoryInit, ''I.IvoryStore, ''I.IvoryZeroVal ]] where name = thDefName def ty = thDefType def+#if __GLASGOW_HASKELL__ >= 800+ field = bangType (bang noSourceUnpackedness noSourceStrictness) (return ty)+#else+ field = strictType notStrict (return ty)+#endif -- | Generate an instance of the "BitData" type class for a bit data -- definition.@@ -362,11 +351,7 @@ baseTy = thDefType def instTy = [t| B.BitData $(conT (thDefName def)) |] body = [tyDef, toFun, fromFun]-#if __GLASGOW_HASKELL__ >= 708- tyDef = return (TySynInstD ''B.BitType (TySynEqn [ConT name] baseTy))-#else- tyDef = return (TySynInstD ''B.BitType [ConT name] baseTy)-#endif+ tyDef = tySynInstDCompat ''B.BitType [conT name] (return baseTy) x = mkName "x" toFun = funD 'B.toBits [clause [conP name [varP x]] (normalB (varE x)) []]@@ -393,11 +378,7 @@ -- result type is the same. mkArraySizeTypeInst :: Integer -> TH.Type -> [DecQ] mkArraySizeTypeInst n ty =-#if __GLASGOW_HASKELL__ >= 708- [tySynInstD ''B.ArraySize (tySynEqn args size)]-#else- [tySynInstD ''B.ArraySize args size]-#endif+ [tySynInstDCompat ''B.ArraySize args size] where size = tyBits ty >>= litT . numTyLit . fromIntegral . (* n) args = [litT (numTyLit (fromIntegral n)), return ty]
src/Ivory/Language/Syntax/Concrete/QQ/Common.hs view
@@ -41,6 +41,7 @@ import Prelude.Compat hiding (exp) import Language.Haskell.TH hiding (Stmt, Exp, Type)+import Language.Haskell.TH.Datatype (pragLineDCompat) import qualified Language.Haskell.TH as T import Data.List (nub)@@ -193,13 +194,11 @@ -------------------------------------------------------------------------------- -#if __GLASGOW_HASKELL__ >= 709 lnPragma :: SrcLoc -> Q [Dec] lnPragma srcloc = case srcLoclinePragma srcloc of Nothing -> return []- Just (ln, file) -> (:[]) `fmap` pragLineD ln file-#else-lnPragma :: SrcLoc -> Q [Dec]-lnPragma _srcloc = return []-#endif+ Just (ln, file) ->+ case pragLineDCompat ln file of+ Nothing -> return []+ Just p -> (:[]) `fmap` p