X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=utils%2Fext-core%2FParseGlue.hs;h=2e196c071e3a0e7ab83b1b9a1a39446ba0751aaa;hp=9bd3c4f7eb9a58146ca9882c6ac1aee1df235c51;hb=6e93da5e0a775b2bfb9c9f2bd31a36cc828521cb;hpb=276585028d51a2516a31b91a91a1f4bba5c9f8ba diff --git a/utils/ext-core/ParseGlue.hs b/utils/ext-core/ParseGlue.hs index 9bd3c4f..2e196c0 100644 --- a/utils/ext-core/ParseGlue.hs +++ b/utils/ext-core/ParseGlue.hs @@ -1,8 +1,16 @@ module ParseGlue where +import Encoding + +import Data.List + data ParseResult a = OkP a | FailP String type P a = String -> Int -> ParseResult a +instance Show a => Show (ParseResult a) + where show (OkP r) = show r + show (FailP s) = s + thenP :: P a -> (a -> P b) -> P b m `thenP` k = \ s l -> case m s l of @@ -53,7 +61,20 @@ data Token = | TKchar Char | TKEOF - +-- ugh +splitModuleName mn = + let decoded = zDecodeString mn + -- Triple ugh. + -- We re-encode the individual parts so that: + -- main:Foo_Bar.Quux.baz + -- prints as: + -- main:FoozuBarziQuux.baz + -- and not: + -- main:Foo_BarziQuux.baz + parts = map zEncodeString $ filter (notElem '.') $ groupBy + (\ c1 c2 -> c1 /= '.' && c2 /= '.') + decoded in + (take (length parts - 1) parts, last parts)