pretty-show (empty) → 1
raw patch · 9 files changed
+1943/−0 lines, 9 filesdep +arraydep +basedep +haskell-lexersetup-changed
Dependencies added: array, base, haskell-lexer, pretty
Files
- LICENSE +19/−0
- Setup.lhs +8/−0
- Text/Show/Parser.y +93/−0
- Text/Show/Pretty.hs +80/−0
- Text/Show/Value.hs +28/−0
- dist/build/Text/Show/Parser.hs +814/−0
- dist/build/ppsh/ppsh-tmp/Text/Show/Parser.hs +814/−0
- ppsh.hs +27/−0
- pretty-show.cabal +60/−0
+ LICENSE view
@@ -0,0 +1,19 @@+Copyright (c) 2008 Iavor S. Diatchki++Permission is hereby granted, free of charge, to any person obtaining a copy of+this software and associated documentation files (the "Software"), to deal in+the Software without restriction, including without limitation the rights to+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies+of the Software, and to permit persons to whom the Software is furnished to do+so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.
+ Setup.lhs view
@@ -0,0 +1,8 @@+#! /usr/bin/env runhaskell++> module Main (main) where+>+> import Distribution.Simple (defaultMain)+>+> main :: IO ()+> main = defaultMain
+ Text/Show/Parser.y view
@@ -0,0 +1,93 @@+{+-- We use these options because Happy generates code with a lot of warnings.+{-# OPTIONS_GHC -w #-}+module Text.Show.Parser (parseValue) where++import Text.Show.Value+import Language.Haskell.Lexer+}++%token++ '=' { (Reservedop, (_,"=")) }+ '(' { (Special, (_,"(")) }+ ')' { (Special, (_,")")) }+ '{' { (Special, (_,"{")) }+ '}' { (Special, (_,"}")) }+ '[' { (Special, (_,"[")) }+ ']' { (Special, (_,"]")) }+ ',' { (Special, (_,",")) }++ INT { (IntLit, (_,$$)) }+ FLOAT { (FloatLit, (_,$$)) } + STRING { (StringLit, (_,$$)) }+ CHAR { (CharLit, (_,$$)) }++ VARID { (Varid, (_,$$)) }+ QVARID { (Qvarid, (_,$$)) }+ CONID { (Conid, (_,$$)) }+ QCONID { (Qconid, (_,$$)) }+ CONSYM { (Consym, (_,$$)) }+ QCONSYM { (Qconsym, (_,$$)) } +++%monad { Maybe } { (>>=) } { return }+%name parseValue value +%tokentype { PosToken }+++%%++value :: { Value }+ : con list1(avalue) { Con $1 $2 }+ | avalue { $1 }++avalue :: { Value }+ : '(' value ')' { $2 }+ | '[' sep(value,',') ']' { List $2 }+ | '(' tuple ')' { Tuple $2 }+ | con '{' sep(field,',') '}' { Rec $1 $3 }+ | con { Con $1 [] }+ | INT { Other $1 }+ | FLOAT { Other $1 }+ | STRING { Other $1 }+ | CHAR { Other $1 }++con :: { String }+ : CONID { $1 }+ | QCONID { $1 }+ -- to support things like "fromList x"+ | VARID { $1 }+ | QVARID { $1 }++field :: { (Name,Value) }+ : VARID '=' value { ($1,$3) }++tuple :: { [Value] }+ : { [] }+ | value ',' sep1(value,',') { $1 : $3 }+++-- Common Rule Patterns --------------------------------------------------------++sep1(p,q) : p list(snd(q,p)) { $1 : $2 }+sep(p,q) : sep1(p,q) { $1 }+ | { [] }++snd(p,q) : p q { $2 }++list1(p) : rev_list1(p) { reverse $1 }+list(p) : list1(p) { $1 }+ | { [] }++rev_list1(p) : p { [$1] }+ | rev_list1(p) p { $2 : $1 }+++++{+happyError :: [PosToken] -> Maybe a+happyError ((_,(p,_)) : _) = Nothing -- error ("Parser error at: " ++ show p)+happyError [] = Nothing -- error ("Parser error at EOF")+}
+ Text/Show/Pretty.hs view
@@ -0,0 +1,80 @@+-------------------------------------------------------------------------------- +-- | +-- Module : Text.Show.Pretty +-- Copyright : (c) Iavor S. Diatchki 2009 +-- License : BSD3 +-- +-- Maintainer : iavor.diatchki@gmail.com +-- Stability : provisional +-- Portability : Haskell 98 +-- +-- Functions for human-readable derived show instances. +-------------------------------------------------------------------------------- + + +module Text.Show.Pretty + ( Name, Value(..) + , parseValue, ppValue, ppDoc, ppShow + ) where + +import Text.PrettyPrint +import qualified Text.Show.Parser as P +import Text.Show.Value +import Language.Haskell.Lexer(rmSpace,lexerPass0) + +parseValue :: String -> Maybe Value +parseValue = P.parseValue . rmSpace . lexerPass0 + +-- | Convert a generic value into a pretty String, if possible. +ppShow :: Show a => a -> String +ppShow = show . ppDoc + +-- | Try to show a value, prettily. +-- If we do not undertant the value, then we just use its +-- standard show instance. +ppDoc :: Show a => a -> Doc +ppDoc a = case parseValue txt of + Just v -> ppValue v + Nothing -> text txt + where txt = show a + + +-- | Pretty print a generic value. +-- Our intention is that the result is equivalent to the show +-- insrnace for the origianl value, except possivly easier to +-- unserstand by a human. +ppValue :: Value -> Doc +ppValue val = case val of + Con c vs -> ppCon c vs + Rec c fs -> hang (text c) 2 $ block '{' '}' (map ppField fs) + where ppField (x,v) = text x <+> char '=' <+> ppValue v + + List vs -> block '[' ']' (map ppValue vs) + Tuple vs -> block '(' ')' (map ppValue vs) + Other cs -> text cs + + +-- Private --------------------------------------------------------------------- + +ppCon :: Name -> [Value] -> Doc +ppCon c [] = text c +ppCon c (v : vs) = hang line1 2 (foldl addParam doc1 vs) + where (line1,doc1) + | isAtom v = (text c, ppValue v) + | otherwise = (text c <+> char '(', ppValue v <+> char ')') + + addParam d p + | isAtom p = d $$ ppValue p + | otherwise = (d <+> char '(') $$ (ppValue p <+> char ')') + +isAtom :: Value -> Bool +isAtom (Con _ (_:_)) = False +isAtom _ = True + +block :: Char -> Char -> [Doc] -> Doc +block a b [] = char a <> char b +block a b (d:ds) = char a <+> d + $$ vcat [ char ',' <+> x | x <- ds ] + $$ char b + +
+ Text/Show/Value.hs view
@@ -0,0 +1,28 @@+-------------------------------------------------------------------------------- +-- | +-- Module : Text.Show.Value +-- Copyright : (c) Iavor S. Diatchki 2009 +-- License : BSD3 +-- +-- Maintainer : iavor.diatchki@gmail.com +-- Stability : provisional +-- Portability : Haskell 98 +-- +-- Generic representation of Showable values. +-------------------------------------------------------------------------------- + + +module Text.Show.Value ( Name, Value(..) ) where + +-- | A name. +type Name = String + +-- | Generic Haskell values +data Value = Con Name [Value] -- ^ Data constructor + | Rec Name [ (Name,Value) ] -- ^ Record value + | Tuple [Value] -- ^ Tuple + | List [Value] -- ^ List + | Other String -- ^ Something else (e.g. number) + deriving (Eq,Show) + +
+ dist/build/Text/Show/Parser.hs view
@@ -0,0 +1,814 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+-- We use these options because Happy generates code with a lot of warnings.+{-# OPTIONS_GHC -w #-}+module Text.Show.Parser (parseValue) where++import Text.Show.Value+import Language.Haskell.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.18.2++newtype HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn4 :: (Value) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn4 x = unsafeCoerce# x+{-# INLINE happyIn4 #-}+happyOut4 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Value)+happyOut4 x = unsafeCoerce# x+{-# INLINE happyOut4 #-}+happyIn5 :: (Value) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn5 x = unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Value)+happyOut5 x = unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: (String) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (String)+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: ((Name,Value)) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> ((Name,Value))+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: ([Value]) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> ([Value])+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t9+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t10+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t11+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t12+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t13+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t14+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t15+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t16+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t17+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t18+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: t19 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t19+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: t20 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t20+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t21+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: t22 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t22+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyInTok :: (PosToken) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (PosToken)+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x0e\x00\x35\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\xff\xff\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4a\x00\x00\x00\x1f\x00\x3e\x00\x00\x00\x38\x00\x00\x00\x0e\x00\x42\x00\x2b\x00\x33\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x4c\x00\x27\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x11\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x34\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x49\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\xf1\xff\xf0\xff\xf3\xff\xf2\xff\x00\x00\xfd\xff\xf8\xff\xee\xff\xe8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xe5\xff\x00\x00\xe9\xff\x00\x00\x00\x00\xe4\xff\xf8\xff\xfe\xff\xec\xff\xea\xff\xdf\xff\x00\x00\xeb\xff\x00\x00\xe3\xff\xfa\xff\xfc\xff\x00\x00\xfb\xff\xe7\xff\xdb\xff\xe6\xff\xde\xff\x00\x00\xe1\xff\xda\xff\xed\xff\x00\x00\xf9\xff\xe2\xff\xd9\xff\xe0\xff\xdc\xff\x00\x00\xdd\xff\xd8\xff\xef\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x0f\x00\x04\x00\x03\x00\x06\x00\x01\x00\x02\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x02\x00\x00\x00\x01\x00\x02\x00\x06\x00\x04\x00\x0c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x01\x00\x02\x00\x0d\x00\x03\x00\x05\x00\x00\x00\x01\x00\x02\x00\x08\x00\x0a\x00\x02\x00\x08\x00\x07\x00\x08\x00\x00\x00\x01\x00\x02\x00\x01\x00\x09\x00\x08\x00\x08\x00\x0c\x00\x08\x00\x0e\x00\x03\x00\x05\x00\x11\x00\x06\x00\x0d\x00\x04\x00\x0f\x00\x10\x00\x0b\x00\x12\x00\x03\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x0d\x00\x08\x00\x07\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x0b\x00\x33\x00\x1a\x00\x32\x00\x0c\x00\x1e\x00\x16\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x04\x00\x05\x00\x06\x00\x07\x00\x0b\x00\x13\x00\x08\x00\x09\x00\x0c\x00\x14\x00\x29\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x04\x00\x05\x00\x06\x00\x07\x00\x15\x00\x16\x00\x1e\x00\x21\x00\x17\x00\x10\x00\x08\x00\x09\x00\x22\x00\x18\x00\x02\x00\x32\x00\x11\x00\x12\x00\x10\x00\x08\x00\x09\x00\x2c\x00\x23\x00\x28\x00\x32\x00\x24\x00\x2a\x00\x25\x00\x1a\x00\x2d\x00\x26\x00\x1b\x00\x2d\x00\x1a\x00\x2e\x00\x2f\x00\x1c\x00\x30\x00\x20\x00\x04\x00\x05\x00\x06\x00\x07\x00\x34\x00\x08\x00\x09\x00\x28\x00\x08\x00\x09\x00\x07\x00\x08\x00\x09\x00\x1e\x00\x28\x00\x23\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = array (1, 39) [+ (1 , happyReduce_1),+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39)+ ]++happy_n_terms = 20 :: Int+happy_n_nonterms = 19 :: Int++happyReduce_1 = happySpecReduce_2 0# happyReduction_1+happyReduction_1 happy_x_2+ happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { happy_var_2 -> + happyIn4+ (Con happy_var_1 happy_var_2+ )}}++happyReduce_2 = happySpecReduce_1 0# happyReduction_2+happyReduction_2 happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn4+ (happy_var_1+ )}++happyReduce_3 = happySpecReduce_3 1# happyReduction_3+happyReduction_3 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut4 happy_x_2 of { happy_var_2 -> + happyIn5+ (happy_var_2+ )}++happyReduce_4 = happySpecReduce_3 1# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut11 happy_x_2 of { happy_var_2 -> + happyIn5+ (List happy_var_2+ )}++happyReduce_5 = happySpecReduce_3 1# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn5+ (Tuple happy_var_2+ )}++happyReduce_6 = happyReduce 4# 1# happyReduction_6+happyReduction_6 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut6 happy_x_1 of { happy_var_1 -> + case happyOut10 happy_x_3 of { happy_var_3 -> + happyIn5+ (Rec happy_var_1 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_7 = happySpecReduce_1 1# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn5+ (Con happy_var_1 []+ )}++happyReduce_8 = happySpecReduce_1 1# happyReduction_8+happyReduction_8 happy_x_1+ = case happyOutTok happy_x_1 of { ((IntLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_9 = happySpecReduce_1 1# happyReduction_9+happyReduction_9 happy_x_1+ = case happyOutTok happy_x_1 of { ((FloatLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_10 = happySpecReduce_1 1# happyReduction_10+happyReduction_10 happy_x_1+ = case happyOutTok happy_x_1 of { ((StringLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_11 = happySpecReduce_1 1# happyReduction_11+happyReduction_11 happy_x_1+ = case happyOutTok happy_x_1 of { ((CharLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_12 = happySpecReduce_1 2# happyReduction_12+happyReduction_12 happy_x_1+ = case happyOutTok happy_x_1 of { ((Conid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_13 = happySpecReduce_1 2# happyReduction_13+happyReduction_13 happy_x_1+ = case happyOutTok happy_x_1 of { ((Qconid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_14 = happySpecReduce_1 2# happyReduction_14+happyReduction_14 happy_x_1+ = case happyOutTok happy_x_1 of { ((Varid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_15 = happySpecReduce_1 2# happyReduction_15+happyReduction_15 happy_x_1+ = case happyOutTok happy_x_1 of { ((Qvarid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_16 = happySpecReduce_3 3# happyReduction_16+happyReduction_16 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { ((Varid, (_,happy_var_1))) -> + case happyOut4 happy_x_3 of { happy_var_3 -> + happyIn7+ ((happy_var_1,happy_var_3)+ )}}++happyReduce_17 = happySpecReduce_0 4# happyReduction_17+happyReduction_17 = happyIn8+ ([]+ )++happyReduce_18 = happySpecReduce_3 4# happyReduction_18+happyReduction_18 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn8+ (happy_var_1 : happy_var_3+ )}}++happyReduce_19 = happySpecReduce_1 5# happyReduction_19+happyReduction_19 happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + happyIn9+ (reverse happy_var_1+ )}++happyReduce_20 = happySpecReduce_1 6# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn10+ (happy_var_1+ )}++happyReduce_21 = happySpecReduce_0 6# happyReduction_21+happyReduction_21 = happyIn10+ ([]+ )++happyReduce_22 = happySpecReduce_1 7# happyReduction_22+happyReduction_22 happy_x_1+ = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn11+ (happy_var_1+ )}++happyReduce_23 = happySpecReduce_0 7# happyReduction_23+happyReduction_23 = happyIn11+ ([]+ )++happyReduce_24 = happySpecReduce_2 8# happyReduction_24+happyReduction_24 happy_x_2+ happy_x_1+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn12+ (happy_var_1 : happy_var_2+ )}}++happyReduce_25 = happySpecReduce_1 9# happyReduction_25+happyReduction_25 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn13+ (happy_var_1+ )}++happyReduce_26 = happySpecReduce_0 9# happyReduction_26+happyReduction_26 = happyIn13+ ([]+ )++happyReduce_27 = happySpecReduce_1 10# happyReduction_27+happyReduction_27 happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn14+ ([happy_var_1]+ )}++happyReduce_28 = happySpecReduce_2 10# happyReduction_28+happyReduction_28 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn14+ (happy_var_2 : happy_var_1+ )}}++happyReduce_29 = happySpecReduce_2 11# happyReduction_29+happyReduction_29 happy_x_2+ happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut17 happy_x_2 of { happy_var_2 -> + happyIn15+ (happy_var_1 : happy_var_2+ )}}++happyReduce_30 = happySpecReduce_2 12# happyReduction_30+happyReduction_30 happy_x_2+ happy_x_1+ = case happyOut4 happy_x_2 of { happy_var_2 -> + happyIn16+ (happy_var_2+ )}++happyReduce_31 = happySpecReduce_1 13# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn17+ (happy_var_1+ )}++happyReduce_32 = happySpecReduce_0 13# happyReduction_32+happyReduction_32 = happyIn17+ ([]+ )++happyReduce_33 = happySpecReduce_1 14# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn18+ (reverse happy_var_1+ )}++happyReduce_34 = happySpecReduce_2 15# happyReduction_34+happyReduction_34 happy_x_2+ happy_x_1+ = case happyOut7 happy_x_2 of { happy_var_2 -> + happyIn19+ (happy_var_2+ )}++happyReduce_35 = happySpecReduce_1 16# happyReduction_35+happyReduction_35 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn20+ (reverse happy_var_1+ )}++happyReduce_36 = happySpecReduce_1 17# happyReduction_36+happyReduction_36 happy_x_1+ = case happyOut16 happy_x_1 of { happy_var_1 -> + happyIn21+ ([happy_var_1]+ )}++happyReduce_37 = happySpecReduce_2 17# happyReduction_37+happyReduction_37 happy_x_2+ happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut16 happy_x_2 of { happy_var_2 -> + happyIn21+ (happy_var_2 : happy_var_1+ )}}++happyReduce_38 = happySpecReduce_1 18# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_39 = happySpecReduce_2 18# happyReduction_39+happyReduction_39 happy_x_2+ happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn22+ (happy_var_2 : happy_var_1+ )}}++happyNewToken action sts stk [] =+ happyDoAction 19# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+ let cont i = happyDoAction i tk action sts stk tks in+ case tk of {+ (Reservedop, (_,"=")) -> cont 1#;+ (Special, (_,"(")) -> cont 2#;+ (Special, (_,")")) -> cont 3#;+ (Special, (_,"{")) -> cont 4#;+ (Special, (_,"}")) -> cont 5#;+ (Special, (_,"[")) -> cont 6#;+ (Special, (_,"]")) -> cont 7#;+ (Special, (_,",")) -> cont 8#;+ (IntLit, (_,happy_dollar_dollar)) -> cont 9#;+ (FloatLit, (_,happy_dollar_dollar)) -> cont 10#;+ (StringLit, (_,happy_dollar_dollar)) -> cont 11#;+ (CharLit, (_,happy_dollar_dollar)) -> cont 12#;+ (Varid, (_,happy_dollar_dollar)) -> cont 13#;+ (Qvarid, (_,happy_dollar_dollar)) -> cont 14#;+ (Conid, (_,happy_dollar_dollar)) -> cont 15#;+ (Qconid, (_,happy_dollar_dollar)) -> cont 16#;+ (Consym, (_,happy_dollar_dollar)) -> cont 17#;+ (Qconsym, (_,happy_dollar_dollar)) -> cont 18#;+ _ -> happyError' (tk:tks)+ }++happyError_ tk tks = happyError' (tk:tks)++happyThen :: () => Maybe a -> (a -> Maybe b) -> Maybe b+happyThen = ((>>=))+happyReturn :: () => a -> Maybe a+happyReturn = (return)+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Maybe a+happyReturn1 = \a tks -> (return) a+happyError' :: () => [(PosToken)] -> Maybe a+happyError' = happyError++parseValue tks = happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++happyError :: [PosToken] -> Maybe a+happyError ((_,(p,_)) : _) = Nothing -- error ("Parser error at: " ++ show p)+happyError [] = Nothing -- error ("Parser error at EOF")+{-# 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.
+ dist/build/ppsh/ppsh-tmp/Text/Show/Parser.hs view
@@ -0,0 +1,814 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+-- We use these options because Happy generates code with a lot of warnings.+{-# OPTIONS_GHC -w #-}+module Text.Show.Parser (parseValue) where++import Text.Show.Value+import Language.Haskell.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.18.2++newtype HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn4 :: (Value) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn4 x = unsafeCoerce# x+{-# INLINE happyIn4 #-}+happyOut4 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Value)+happyOut4 x = unsafeCoerce# x+{-# INLINE happyOut4 #-}+happyIn5 :: (Value) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn5 x = unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Value)+happyOut5 x = unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: (String) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (String)+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: ((Name,Value)) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> ((Name,Value))+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: ([Value]) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> ([Value])+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t9+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t10+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t11+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t12+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t13+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t14+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t15+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t16+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t17+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t18+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: t19 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t19+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: t20 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t20+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t21+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: t22 -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t22+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyInTok :: (PosToken) -> (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (PosToken)+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x0e\x00\x35\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\xff\xff\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4a\x00\x00\x00\x1f\x00\x3e\x00\x00\x00\x38\x00\x00\x00\x0e\x00\x42\x00\x2b\x00\x33\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x4c\x00\x27\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x11\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x34\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x49\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\xf1\xff\xf0\xff\xf3\xff\xf2\xff\x00\x00\xfd\xff\xf8\xff\xee\xff\xe8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xe5\xff\x00\x00\xe9\xff\x00\x00\x00\x00\xe4\xff\xf8\xff\xfe\xff\xec\xff\xea\xff\xdf\xff\x00\x00\xeb\xff\x00\x00\xe3\xff\xfa\xff\xfc\xff\x00\x00\xfb\xff\xe7\xff\xdb\xff\xe6\xff\xde\xff\x00\x00\xe1\xff\xda\xff\xed\xff\x00\x00\xf9\xff\xe2\xff\xd9\xff\xe0\xff\xdc\xff\x00\x00\xdd\xff\xd8\xff\xef\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x0f\x00\x04\x00\x03\x00\x06\x00\x01\x00\x02\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x02\x00\x00\x00\x01\x00\x02\x00\x06\x00\x04\x00\x0c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x01\x00\x02\x00\x0d\x00\x03\x00\x05\x00\x00\x00\x01\x00\x02\x00\x08\x00\x0a\x00\x02\x00\x08\x00\x07\x00\x08\x00\x00\x00\x01\x00\x02\x00\x01\x00\x09\x00\x08\x00\x08\x00\x0c\x00\x08\x00\x0e\x00\x03\x00\x05\x00\x11\x00\x06\x00\x0d\x00\x04\x00\x0f\x00\x10\x00\x0b\x00\x12\x00\x03\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x0d\x00\x08\x00\x07\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x0b\x00\x33\x00\x1a\x00\x32\x00\x0c\x00\x1e\x00\x16\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x04\x00\x05\x00\x06\x00\x07\x00\x0b\x00\x13\x00\x08\x00\x09\x00\x0c\x00\x14\x00\x29\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x04\x00\x05\x00\x06\x00\x07\x00\x15\x00\x16\x00\x1e\x00\x21\x00\x17\x00\x10\x00\x08\x00\x09\x00\x22\x00\x18\x00\x02\x00\x32\x00\x11\x00\x12\x00\x10\x00\x08\x00\x09\x00\x2c\x00\x23\x00\x28\x00\x32\x00\x24\x00\x2a\x00\x25\x00\x1a\x00\x2d\x00\x26\x00\x1b\x00\x2d\x00\x1a\x00\x2e\x00\x2f\x00\x1c\x00\x30\x00\x20\x00\x04\x00\x05\x00\x06\x00\x07\x00\x34\x00\x08\x00\x09\x00\x28\x00\x08\x00\x09\x00\x07\x00\x08\x00\x09\x00\x1e\x00\x28\x00\x23\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = array (1, 39) [+ (1 , happyReduce_1),+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39)+ ]++happy_n_terms = 20 :: Int+happy_n_nonterms = 19 :: Int++happyReduce_1 = happySpecReduce_2 0# happyReduction_1+happyReduction_1 happy_x_2+ happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_2 of { happy_var_2 -> + happyIn4+ (Con happy_var_1 happy_var_2+ )}}++happyReduce_2 = happySpecReduce_1 0# happyReduction_2+happyReduction_2 happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn4+ (happy_var_1+ )}++happyReduce_3 = happySpecReduce_3 1# happyReduction_3+happyReduction_3 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut4 happy_x_2 of { happy_var_2 -> + happyIn5+ (happy_var_2+ )}++happyReduce_4 = happySpecReduce_3 1# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut11 happy_x_2 of { happy_var_2 -> + happyIn5+ (List happy_var_2+ )}++happyReduce_5 = happySpecReduce_3 1# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn5+ (Tuple happy_var_2+ )}++happyReduce_6 = happyReduce 4# 1# happyReduction_6+happyReduction_6 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut6 happy_x_1 of { happy_var_1 -> + case happyOut10 happy_x_3 of { happy_var_3 -> + happyIn5+ (Rec happy_var_1 happy_var_3+ ) `HappyStk` happyRest}}++happyReduce_7 = happySpecReduce_1 1# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn5+ (Con happy_var_1 []+ )}++happyReduce_8 = happySpecReduce_1 1# happyReduction_8+happyReduction_8 happy_x_1+ = case happyOutTok happy_x_1 of { ((IntLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_9 = happySpecReduce_1 1# happyReduction_9+happyReduction_9 happy_x_1+ = case happyOutTok happy_x_1 of { ((FloatLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_10 = happySpecReduce_1 1# happyReduction_10+happyReduction_10 happy_x_1+ = case happyOutTok happy_x_1 of { ((StringLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_11 = happySpecReduce_1 1# happyReduction_11+happyReduction_11 happy_x_1+ = case happyOutTok happy_x_1 of { ((CharLit, (_,happy_var_1))) -> + happyIn5+ (Other happy_var_1+ )}++happyReduce_12 = happySpecReduce_1 2# happyReduction_12+happyReduction_12 happy_x_1+ = case happyOutTok happy_x_1 of { ((Conid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_13 = happySpecReduce_1 2# happyReduction_13+happyReduction_13 happy_x_1+ = case happyOutTok happy_x_1 of { ((Qconid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_14 = happySpecReduce_1 2# happyReduction_14+happyReduction_14 happy_x_1+ = case happyOutTok happy_x_1 of { ((Varid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_15 = happySpecReduce_1 2# happyReduction_15+happyReduction_15 happy_x_1+ = case happyOutTok happy_x_1 of { ((Qvarid, (_,happy_var_1))) -> + happyIn6+ (happy_var_1+ )}++happyReduce_16 = happySpecReduce_3 3# happyReduction_16+happyReduction_16 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { ((Varid, (_,happy_var_1))) -> + case happyOut4 happy_x_3 of { happy_var_3 -> + happyIn7+ ((happy_var_1,happy_var_3)+ )}}++happyReduce_17 = happySpecReduce_0 4# happyReduction_17+happyReduction_17 = happyIn8+ ([]+ )++happyReduce_18 = happySpecReduce_3 4# happyReduction_18+happyReduction_18 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn8+ (happy_var_1 : happy_var_3+ )}}++happyReduce_19 = happySpecReduce_1 5# happyReduction_19+happyReduction_19 happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + happyIn9+ (reverse happy_var_1+ )}++happyReduce_20 = happySpecReduce_1 6# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn10+ (happy_var_1+ )}++happyReduce_21 = happySpecReduce_0 6# happyReduction_21+happyReduction_21 = happyIn10+ ([]+ )++happyReduce_22 = happySpecReduce_1 7# happyReduction_22+happyReduction_22 happy_x_1+ = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn11+ (happy_var_1+ )}++happyReduce_23 = happySpecReduce_0 7# happyReduction_23+happyReduction_23 = happyIn11+ ([]+ )++happyReduce_24 = happySpecReduce_2 8# happyReduction_24+happyReduction_24 happy_x_2+ happy_x_1+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn12+ (happy_var_1 : happy_var_2+ )}}++happyReduce_25 = happySpecReduce_1 9# happyReduction_25+happyReduction_25 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn13+ (happy_var_1+ )}++happyReduce_26 = happySpecReduce_0 9# happyReduction_26+happyReduction_26 = happyIn13+ ([]+ )++happyReduce_27 = happySpecReduce_1 10# happyReduction_27+happyReduction_27 happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn14+ ([happy_var_1]+ )}++happyReduce_28 = happySpecReduce_2 10# happyReduction_28+happyReduction_28 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn14+ (happy_var_2 : happy_var_1+ )}}++happyReduce_29 = happySpecReduce_2 11# happyReduction_29+happyReduction_29 happy_x_2+ happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut17 happy_x_2 of { happy_var_2 -> + happyIn15+ (happy_var_1 : happy_var_2+ )}}++happyReduce_30 = happySpecReduce_2 12# happyReduction_30+happyReduction_30 happy_x_2+ happy_x_1+ = case happyOut4 happy_x_2 of { happy_var_2 -> + happyIn16+ (happy_var_2+ )}++happyReduce_31 = happySpecReduce_1 13# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn17+ (happy_var_1+ )}++happyReduce_32 = happySpecReduce_0 13# happyReduction_32+happyReduction_32 = happyIn17+ ([]+ )++happyReduce_33 = happySpecReduce_1 14# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn18+ (reverse happy_var_1+ )}++happyReduce_34 = happySpecReduce_2 15# happyReduction_34+happyReduction_34 happy_x_2+ happy_x_1+ = case happyOut7 happy_x_2 of { happy_var_2 -> + happyIn19+ (happy_var_2+ )}++happyReduce_35 = happySpecReduce_1 16# happyReduction_35+happyReduction_35 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn20+ (reverse happy_var_1+ )}++happyReduce_36 = happySpecReduce_1 17# happyReduction_36+happyReduction_36 happy_x_1+ = case happyOut16 happy_x_1 of { happy_var_1 -> + happyIn21+ ([happy_var_1]+ )}++happyReduce_37 = happySpecReduce_2 17# happyReduction_37+happyReduction_37 happy_x_2+ happy_x_1+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut16 happy_x_2 of { happy_var_2 -> + happyIn21+ (happy_var_2 : happy_var_1+ )}}++happyReduce_38 = happySpecReduce_1 18# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_39 = happySpecReduce_2 18# happyReduction_39+happyReduction_39 happy_x_2+ happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + happyIn22+ (happy_var_2 : happy_var_1+ )}}++happyNewToken action sts stk [] =+ happyDoAction 19# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+ let cont i = happyDoAction i tk action sts stk tks in+ case tk of {+ (Reservedop, (_,"=")) -> cont 1#;+ (Special, (_,"(")) -> cont 2#;+ (Special, (_,")")) -> cont 3#;+ (Special, (_,"{")) -> cont 4#;+ (Special, (_,"}")) -> cont 5#;+ (Special, (_,"[")) -> cont 6#;+ (Special, (_,"]")) -> cont 7#;+ (Special, (_,",")) -> cont 8#;+ (IntLit, (_,happy_dollar_dollar)) -> cont 9#;+ (FloatLit, (_,happy_dollar_dollar)) -> cont 10#;+ (StringLit, (_,happy_dollar_dollar)) -> cont 11#;+ (CharLit, (_,happy_dollar_dollar)) -> cont 12#;+ (Varid, (_,happy_dollar_dollar)) -> cont 13#;+ (Qvarid, (_,happy_dollar_dollar)) -> cont 14#;+ (Conid, (_,happy_dollar_dollar)) -> cont 15#;+ (Qconid, (_,happy_dollar_dollar)) -> cont 16#;+ (Consym, (_,happy_dollar_dollar)) -> cont 17#;+ (Qconsym, (_,happy_dollar_dollar)) -> cont 18#;+ _ -> happyError' (tk:tks)+ }++happyError_ tk tks = happyError' (tk:tks)++happyThen :: () => Maybe a -> (a -> Maybe b) -> Maybe b+happyThen = ((>>=))+happyReturn :: () => a -> Maybe a+happyReturn = (return)+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Maybe a+happyReturn1 = \a tks -> (return) a+happyError' :: () => [(PosToken)] -> Maybe a+happyError' = happyError++parseValue tks = happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++happyError :: [PosToken] -> Maybe a+happyError ((_,(p,_)) : _) = Nothing -- error ("Parser error at: " ++ show p)+happyError [] = Nothing -- error ("Parser error at EOF")+{-# 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.
+ ppsh.hs view
@@ -0,0 +1,27 @@+import Text.Show.Pretty +import System.Environment +import System.IO(hPutStrLn,stderr) + +main :: IO () +main = + do as <- getArgs + case as of + ["--test"] -> interact (show . selftest1) + [] -> interact $ \s -> case parseValue s of + Just v -> show (ppValue v) + Nothing -> s + _ -> hPutStrLn stderr $ unlines + [ "usage: ppsh < showed_value > pretty_value" + , " --test Self test: True means we passed." + ] + +selftest :: Value -> Bool +selftest v = case parseValue $ show $ ppValue v of + Just v1 -> v1 == v + Nothing -> False + +selftest1 :: String -> Bool +selftest1 txt = case parseValue txt of + Just v -> selftest v + Nothing -> True +
+ pretty-show.cabal view
@@ -0,0 +1,60 @@+name: pretty-show+version: 1+synopsis: Tools for working with derived Show instances.++license: BSD3+license-file: LICENSE+author: Iavor S. Diatchki+maintainer: iavor.diatchki@gmail.com++category: Text+homepage: http://wiki.github.com/yav/pretty-show+description:+ We provide a library and an executable for+ working with derived Show instances. By using+ the library, we can parse derived Show instances+ into a generic data structure. The tool uses+ the library to produce human-readable versions+ of Show instances, which can be quite handy+ for debugging Haskell programs.++cabal-version: >= 1.2+build-type: Simple++library+ exposed-modules:+ Text.Show.Pretty+ other-modules:+ Text.Show.Parser+ Text.Show.Value+ build-depends:+ base >= 3 && < 5,+ array >= 0.2 && < 2,+ haskell-lexer >= 1 && < 2,+ pretty >= 1 && < 2+ ghc-options: -Wall++ source-repository head+ type: git+ location: git://github.com/yav/pretty-show.git++++executable ppsh+ main-is: ppsh.hs++ -- Silly. Our real dependency is on 'pretty-show'.+ other-modules:+ Text.Show.Pretty+ Text.Show.Parser+ Text.Show.Value+ build-depends:+ base >= 3 && < 5,+ array >= 0.2 && < 2,+ haskell-lexer >= 1 && < 2,+ pretty >= 1 && < 2+ ghc-options: -Wall++ source-repository head+ type: git+ location: git://github.com/yav/pretty-show.git