packages feed

core 0.2 → 0.3

raw patch · 5 files changed

+411/−13 lines, 5 filesdep +arrayPVP ok

version bump matches the API change (PVP)

Dependencies added: array

API changes (from Hackage documentation)

+ Language.Core.Happy: HappyA# :: Addr# -> HappyAddr
+ Language.Core.Happy: HappyAbsSyn :: HappyAny -> HappyAbsSyn t4
+ Language.Core.Happy: HappyCons :: Int# -> Happy_IntList -> Happy_IntList
+ Language.Core.Happy: HappyIdentity :: a -> HappyIdentity a
+ Language.Core.Happy: HappyStk :: a -> (HappyStk a) -> HappyStk a
+ Language.Core.Happy: data HappyAddr
+ Language.Core.Happy: data HappyStk a
+ Language.Core.Happy: data Happy_IntList
+ Language.Core.Happy: happyActOffsets :: HappyAddr
+ Language.Core.Happy: happyCheck :: HappyAddr
+ Language.Core.Happy: happyDefActions :: HappyAddr
+ Language.Core.Happy: happyDoSeq :: a -> b -> b
+ Language.Core.Happy: happyDontSeq :: a -> b -> b
+ Language.Core.Happy: happyError' :: [Token] -> HappyIdentity a
+ Language.Core.Happy: happyGotoOffsets :: HappyAddr
+ Language.Core.Happy: happyIn4 :: t4 -> (HappyAbsSyn t4)
+ Language.Core.Happy: happyInTok :: Token -> (HappyAbsSyn t4)
+ Language.Core.Happy: happyOut4 :: (HappyAbsSyn t4) -> t4
+ Language.Core.Happy: happyOutTok :: (HappyAbsSyn t4) -> Token
+ Language.Core.Happy: happyReturn :: a -> HappyIdentity a
+ Language.Core.Happy: happyReturn1 :: a -> b -> HappyIdentity a
+ Language.Core.Happy: happyTable :: HappyAddr
+ Language.Core.Happy: happyTcHack :: Int# -> a -> a
+ Language.Core.Happy: happyThen :: HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b
+ Language.Core.Happy: instance Monad HappyIdentity
+ Language.Core.Happy: newtype HappyAbsSyn t4
+ Language.Core.Happy: newtype HappyIdentity a
+ Language.Core.Happy: type HappyAny = Any
+ Language.Core.Parser: Arrow :: Token
+ Language.Core.Parser: At :: Token
+ Language.Core.Parser: Backslash :: Token
+ Language.Core.Parser: Char :: Char -> Token
+ Language.Core.Parser: Colon :: Token
+ Language.Core.Parser: DColon :: Token
+ Language.Core.Parser: Dash :: Token
+ Language.Core.Parser: Dot :: Token
+ Language.Core.Parser: Equal :: Token
+ Language.Core.Parser: Hash :: Token
+ Language.Core.Parser: Keyword :: String -> Token
+ Language.Core.Parser: LBrace :: Token
+ Language.Core.Parser: LParen :: Token
+ Language.Core.Parser: Lname :: ByteString -> Token
+ Language.Core.Parser: Number :: Integer -> Token
+ Language.Core.Parser: Percent :: Token
+ Language.Core.Parser: Pos :: !Int -> !Int -> a -> Pos a
+ Language.Core.Parser: QuestionMark :: Token
+ Language.Core.Parser: RBrace :: Token
+ Language.Core.Parser: RParen :: Token
+ Language.Core.Parser: SColon :: Token
+ Language.Core.Parser: Star :: Token
+ Language.Core.Parser: String :: String -> Token
+ Language.Core.Parser: Uname :: ByteString -> Token
+ Language.Core.Parser: data Pos a
+ Language.Core.Parser: data Token
+ Language.Core.Parser: lexer :: ByteString -> [Pos Token]
+ Language.Core.Syntax: instance Read Alt
+ Language.Core.Syntax: instance Read Bind
+ Language.Core.Syntax: instance Read Cdef
+ Language.Core.Syntax: instance Read Exp
+ Language.Core.Syntax: instance Read Kind
+ Language.Core.Syntax: instance Read Lit
+ Language.Core.Syntax: instance Read Module
+ Language.Core.Syntax: instance Read Tdef
+ Language.Core.Syntax: instance Read Ty
+ Language.Core.Syntax: instance Read Vdef
+ Language.Core.Syntax: instance Read Vdefg

Files

core.cabal view
@@ -1,5 +1,5 @@ name:                core-version:             0.2+version:             0.3 synopsis:            External core parser and pretty printer. description:         External core parser and pretty printer. category:            Language@@ -7,11 +7,13 @@ license-file:        LICENSE author:              David Himmelstrup maintainer:          lemmih@gmail.com-build-Depends:       base, parsec, bytestring, pretty+build-Depends:       base, parsec, bytestring, pretty, array ghc-options:         +ghc-prof-options:    -auto-all build-type:          Simple hs-source-dirs:      src exposed-modules:     Language.Core                      Language.Core.Syntax                      Language.Core.Parser                      Language.Core.Pretty+                     Language.Core.Happy
+ dist/build/Language/Core/Happy.hs view
@@ -0,0 +1,364 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+module Language.Core.Happy where++import Language.Core.Parser (Pos, Token, lexer)+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif++-- parser produced by Happy Version 1.17++newtype HappyAbsSyn t4 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn4 :: t4 -> (HappyAbsSyn t4)+happyIn4 x = unsafeCoerce# x+{-# INLINE happyIn4 #-}+happyOut4 :: (HappyAbsSyn t4) -> t4+happyOut4 x = unsafeCoerce# x+{-# INLINE happyOut4 #-}+happyInTok :: Token -> (HappyAbsSyn t4)+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t4) -> Token+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\x00\x00\x02\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x01\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xfe\xff\x00\x00\x00\x00"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x00\x00\xff\xff\x01\x00"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x02\x00\x00\x00\xff\xff"#++happyReduceArr = array (1, 1) [+	(1 , happyReduce_1)+	]++happy_n_terms = 2 :: Int+happy_n_nonterms = 1 :: Int++happyReduce_1 = happySpecReduce_0  0# happyReduction_1+happyReduction_1  =  happyIn4+		 (undefined+	)++happyNewToken action sts stk [] =+	happyDoAction 1# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = happyDoAction i tk action sts stk tks in+	case tk of {+	_ -> happyError' (tk:tks)+	}++happyError_ tk tks = happyError' (tk:tks)++newtype HappyIdentity a = HappyIdentity a+happyIdentity = HappyIdentity+happyRunIdentity (HappyIdentity a) = a++instance Monad HappyIdentity where+    return = HappyIdentity+    (HappyIdentity p) >>= q = q p++happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b+happyThen = (>>=)+happyReturn :: () => a -> HappyIdentity a+happyReturn = (return)+happyThen1 m k tks = (>>=) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> HappyIdentity a+happyReturn1 = \a tks -> (return) a+happyError' :: () => [Token] -> HappyIdentity a+happyError' = HappyIdentity . parseError++parseModule tks = happyRunIdentity happySomeParser where+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++parseError _ = error "parse error"+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 28 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Int# Happy_IntList++++++{-# LINE 49 "templates/GenericTemplate.hs" #-}++{-# LINE 59 "templates/GenericTemplate.hs" #-}++{-# LINE 68 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+	happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+	= {- nothing -}+++	  case action of+		0#		  -> {- nothing -}+				     happyFail i tk st+		-1# 	  -> {- nothing -}+				     happyAccept i tk st+		n | (n <# (0# :: Int#)) -> {- nothing -}++				     (happyReduceArr ! rule) i tk st+				     where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where new_state = (n -# (1# :: Int#))+   where off    = indexShortOffAddr happyActOffsets st+	 off_i  = (off +# i)+	 check  = if (off_i >=# (0# :: Int#))+			then (indexShortOffAddr happyCheck off_i ==#  i)+			else False+ 	 action | check     = indexShortOffAddr happyTable off_i+		| otherwise = indexShortOffAddr happyDefActions st++{-# LINE 127 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+#if __GLASGOW_HASKELL__ > 500+	narrow16Int# i+#elif __GLASGOW_HASKELL__ == 500+	intToInt16# i+#else+	(i `iShiftL#` 16#) `iShiftRA#` 16#+#endif+  where+#if __GLASGOW_HASKELL__ >= 503+	i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+#else+	i = word2Int# ((high `shiftL#` 8#) `or#` low)+#endif+	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+	low  = int2Word# (ord# (indexCharOffAddr# arr off'))+	off' = off *# 2#++++++data HappyAddr = HappyA# Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 170 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let i = (case unsafeCoerce# x of { (I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k -# (1# :: Int#)) sts of+	 sts1@((HappyCons (st1@(action)) (_))) ->+        	let r = fn stk in  -- it doesn't hurt to always seq here...+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++             off    = indexShortOffAddr happyGotoOffsets st1+             off_i  = (off +# nt)+             new_state = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where off    = indexShortOffAddr happyGotoOffsets st+	 off_i  = (off +# nt)+ 	 new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail  0# tk old_st _ stk =+--	trace "failing" $ +    	happyError_ tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +						(saved_tok `HappyStk` _ `HappyStk` stk) =+--	trace ("discarding state, depth " ++ show (length stk))  $+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail  i tk (action) sts stk =+--      trace "entering error recovery" $+	happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits +--	happySeq = happyDoSeq+-- otherwise it emits+-- 	happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ src/Language/Core/Happy.y view
@@ -0,0 +1,23 @@+{+module Language.Core.Happy where++import Language.Core.Parser (Pos, Token, lexer)++}++%name parseModule+%tokentype { Token }+%error { parseError }+++%%++Module :                  { undefined }++{++parseError _ = error "parse error"+++}+
src/Language/Core/Parser.hs view
@@ -1,6 +1,9 @@ {-# LANGUAGE NoMonomorphismRestriction, PatternGuards #-} module Language.Core.Parser     ( parseModule+    , Pos(..)+    , Token(..)+    , lexer     ) where  import Data.Char@@ -363,6 +366,12 @@                          matchToken Arrow                          k <- kind                          return (Karrow atomic k)+              , try $ do a <- parens ty+                         matchToken Colon+                         matchToken Equal+                         matchToken Colon+                         b <- parens ty+                         return $ Keq a b               , akind ]  tyvar = lname
src/Language/Core/Syntax.lhs view
@@ -8,22 +8,22 @@  data Module  = Module (Pkgname, Mname) [Tdef] [Vdefg]-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Tdef    = Data (Qual Tcon) [Tbind] [Cdef]   | Newtype (Qual Tcon) (Qual Tcon) [Tbind] Ty-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Cdef    = Constr (Qual Dcon) [Tbind] [Ty]   | GadtConstr (Qual Dcon) Ty-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Vdefg    = Rec [Vdef]   | Nonrec Vdef-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  -- Top-level bindings are qualified, so that the printer doesn't have to pass -- around the module name.@@ -31,7 +31,7 @@                  , vdefName  :: Qual Var                  , vdefType  :: Ty                  , vdefExp   :: Exp }-    deriving (Show,Eq)+    deriving (Show,Read,Eq)  data Exp    = Var (Qual Var)@@ -47,18 +47,18 @@   | External String String Ty {- target name, convention, and type -}    | DynExternal String Ty {- convention and type (incl. Addr# of target as first arg) -}    | Label String-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Bind    = Vb Vbind   | Tb Tbind-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Alt    = Acon (Qual Dcon) [Tbind] [Vbind] Exp   | Alit Lit Exp   | Adefault Exp-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  type Vbind = (Qual Var,Ty) type Tbind = (Tvar,Kind)@@ -78,7 +78,7 @@   | InstCoercion Ty Ty   | LeftCoercion Ty   | RightCoercion Ty-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Kind    = Klifted@@ -87,14 +87,14 @@   | Kopen   | Karrow Kind Kind   | Keq Ty Ty-   deriving (Show,Eq)+   deriving (Show,Read,Eq)  data Lit    = Lint Integer Ty   | Lrational Rational Ty   | Lchar Char Ty   | Lstring String Ty-   deriving (Show,Eq)+   deriving (Show,Read,Eq)     type Pkgname = Id