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
| 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)