hprotoc 2.0.14 → 2.0.15
raw patch · 3 files changed
+80/−63 lines, 3 filesdep ~haskell-src-extsnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: haskell-src-exts
API changes (from Hackage documentation)
Files
- dist/build/Text/ProtocolBuffers/ProtoCompile/Lexer.hs +38/−30
- dist/build/hprotoc/hprotoc-tmp/Text/ProtocolBuffers/ProtoCompile/Lexer.hs +38/−30
- hprotoc.cabal +4/−3
dist/build/Text/ProtocolBuffers/ProtoCompile/Lexer.hs view
@@ -117,15 +117,15 @@ -- ----------------------------------------------------------------------------- -- Basic wrapper -{-# LINE 346 "templates/wrappers.hs" #-}+{-# LINE 347 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Basic wrapper, ByteString version -{-# LINE 364 "templates/wrappers.hs" #-}+{-# LINE 365 "templates/wrappers.hs" #-} -{-# LINE 377 "templates/wrappers.hs" #-}+{-# LINE 378 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -133,7 +133,7 @@ -- Adds text positions to the basic model. -{-# LINE 394 "templates/wrappers.hs" #-}+{-# LINE 395 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -168,7 +168,7 @@ alex_deflt :: AlexAddr alex_deflt = AlexA# "\xff\xff\x30\x00\x30\x00\x03\x00\x03\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\x18\x00\x18\x00\xff\xff\x1c\x00\x1c\x00\x1e\x00\x1e\x00\x22\x00\x22\x00\x27\x00\x27\x00\x2c\x00\x2c\x00\x2f\x00\x2f\x00\x30\x00\x30\x00\x30\x00\x31\x00\x31\x00\x33\x00\x33\x00\x37\x00\x37\x00\xff\xff\x03\x00\x03\x00\x03\x00\x39\x00\x39\x00\x39\x00\x30\x00\x41\x00\x41\x00\x45\x00\x45\x00\x5c\x00\x5c\x00\x5c\x00\xff\xff\x39\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4a\x00\x47\x00\xff\xff\x47\x00\x47\x00\xff\xff\xff\xff\xff\xff\x30\x00\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x39\x00"# -alex_accept = listArray (0::Int,93) [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred (alex_action_2) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_6))],[(AlexAccPred (alex_action_3) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_7))],[(AlexAccPred (alex_action_3) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_7))],[(AlexAccPred (alex_action_4) (alexRightContext 67)),(AlexAcc (alex_action_8))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))]]+alex_accept = listArray (0::Int,93) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccPred (alex_action_2) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_6))),AlexAccPred (alex_action_3) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_7))),AlexAccPred (alex_action_3) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_7))),AlexAccPred (alex_action_4) (alexRightContext 67)(AlexAcc (alex_action_8)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14)] {-# LINE 58 "Text/ProtocolBuffers/ProtoCompile/Lexer.x" #-} line :: AlexPosn -> Int@@ -340,9 +340,9 @@ -- ----------------------------------------------------------------------------- -- INTERNALS and main scanner engine -{-# LINE 37 "templates/GenericTemplate.hs" #-}+{-# LINE 35 "templates/GenericTemplate.hs" #-} -{-# LINE 47 "templates/GenericTemplate.hs" #-}+{-# LINE 45 "templates/GenericTemplate.hs" #-} data AlexAddr = AlexA# Addr#@@ -373,14 +373,14 @@ #ifdef WORDS_BIGENDIAN narrow32Int# i where- !i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+ i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` (b2 `uncheckedShiftL#` 16#) `or#` (b1 `uncheckedShiftL#` 8#) `or#` b0)- !b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- !b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- !b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- !b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- !off' = off *# 4#+ b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+ b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+ b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ b0 = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 4# #else indexInt32OffAddr# arr off #endif@@ -455,36 +455,41 @@ - let- (base) = alexIndexInt32OffAddr alex_base s- ((I# (ord_c))) = fromIntegral c- (offset) = (base +# ord_c)- (check) = alexIndexInt16OffAddr alex_check offset+ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset - (new_s) = if (offset >=# 0#) && (check ==# ord_c)+ new_s = if (offset >=# 0#) && (check ==# ord_c) then alexIndexInt16OffAddr alex_table offset else alexIndexInt16OffAddr alex_deflt s in- case new_s of + case new_s of -1# -> (new_acc, input) -- on an error, we want to keep the input *before* the -- character that failed, not after. _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len) -- note that the length is increased ONLY if this is the 1st byte in a char encoding) new_input new_s new_acc-+ } where- check_accs [] = last_acc- check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))- check_accs (AlexAccPred a predx : rest)+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))++ check_accs (AlexAccPred a predx rest) | predx user orig_input (I# (len)) input = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkipPred predx : rest)+ | otherwise+ = check_accs rest+ check_accs (AlexAccSkipPred predx rest) | predx user orig_input (I# (len)) input = AlexLastSkip input (I# (len))- check_accs (_ : rest) = check_accs rest+ | otherwise+ = check_accs rest + data AlexLastAcc a = AlexNone | AlexLastAcc a !AlexInput !Int@@ -496,11 +501,13 @@ fmap f (AlexLastSkip x y) = AlexLastSkip x y data AlexAcc a user- = AlexAcc a+ = AlexAccNone+ | AlexAcc a | AlexAccSkip- | AlexAccPred a (AlexAccPred user)- | AlexAccSkipPred (AlexAccPred user) + | AlexAccPred a (AlexAccPred user) (AlexAcc a user)+ | AlexAccSkipPred (AlexAccPred user) (AlexAcc a user)+ type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool -- -----------------------------------------------------------------------------@@ -525,6 +532,7 @@ -- TODO: there's no need to find the longest -- match when checking the right context, just -- the first match will do.+ -- used by wrappers iUnbox (I# (i)) = i
dist/build/hprotoc/hprotoc-tmp/Text/ProtocolBuffers/ProtoCompile/Lexer.hs view
@@ -117,15 +117,15 @@ -- ----------------------------------------------------------------------------- -- Basic wrapper -{-# LINE 346 "templates/wrappers.hs" #-}+{-# LINE 347 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Basic wrapper, ByteString version -{-# LINE 364 "templates/wrappers.hs" #-}+{-# LINE 365 "templates/wrappers.hs" #-} -{-# LINE 377 "templates/wrappers.hs" #-}+{-# LINE 378 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -133,7 +133,7 @@ -- Adds text positions to the basic model. -{-# LINE 394 "templates/wrappers.hs" #-}+{-# LINE 395 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -168,7 +168,7 @@ alex_deflt :: AlexAddr alex_deflt = AlexA# "\xff\xff\x30\x00\x30\x00\x03\x00\x03\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\x18\x00\x18\x00\xff\xff\x1c\x00\x1c\x00\x1e\x00\x1e\x00\x22\x00\x22\x00\x27\x00\x27\x00\x2c\x00\x2c\x00\x2f\x00\x2f\x00\x30\x00\x30\x00\x30\x00\x31\x00\x31\x00\x33\x00\x33\x00\x37\x00\x37\x00\xff\xff\x03\x00\x03\x00\x03\x00\x39\x00\x39\x00\x39\x00\x30\x00\x41\x00\x41\x00\x45\x00\x45\x00\x5c\x00\x5c\x00\x5c\x00\xff\xff\x39\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4a\x00\x47\x00\xff\xff\x47\x00\x47\x00\xff\xff\xff\xff\xff\xff\x30\x00\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x39\x00"# -alex_accept = listArray (0::Int,93) [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred (alex_action_2) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_6))],[(AlexAccPred (alex_action_3) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_7))],[(AlexAccPred (alex_action_3) (alexRightContext 67)),(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_7))],[(AlexAccPred (alex_action_4) (alexRightContext 67)),(AlexAcc (alex_action_8))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAccPred (alex_action_5) (alexRightContext 67)),(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))]]+alex_accept = listArray (0::Int,93) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAccPred (alex_action_2) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_6))),AlexAccPred (alex_action_3) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_7))),AlexAccPred (alex_action_3) (alexRightContext 67)(AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_7))),AlexAccPred (alex_action_4) (alexRightContext 67)(AlexAcc (alex_action_8)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAccPred (alex_action_5) (alexRightContext 67)(AlexAcc (alex_action_9)),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14),AlexAcc (alex_action_14)] {-# LINE 58 "Text/ProtocolBuffers/ProtoCompile/Lexer.x" #-} line :: AlexPosn -> Int@@ -340,9 +340,9 @@ -- ----------------------------------------------------------------------------- -- INTERNALS and main scanner engine -{-# LINE 37 "templates/GenericTemplate.hs" #-}+{-# LINE 35 "templates/GenericTemplate.hs" #-} -{-# LINE 47 "templates/GenericTemplate.hs" #-}+{-# LINE 45 "templates/GenericTemplate.hs" #-} data AlexAddr = AlexA# Addr#@@ -373,14 +373,14 @@ #ifdef WORDS_BIGENDIAN narrow32Int# i where- !i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+ i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` (b2 `uncheckedShiftL#` 16#) `or#` (b1 `uncheckedShiftL#` 8#) `or#` b0)- !b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- !b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- !b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- !b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- !off' = off *# 4#+ b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+ b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+ b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ b0 = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 4# #else indexInt32OffAddr# arr off #endif@@ -455,36 +455,41 @@ - let- (base) = alexIndexInt32OffAddr alex_base s- ((I# (ord_c))) = fromIntegral c- (offset) = (base +# ord_c)- (check) = alexIndexInt16OffAddr alex_check offset+ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset - (new_s) = if (offset >=# 0#) && (check ==# ord_c)+ new_s = if (offset >=# 0#) && (check ==# ord_c) then alexIndexInt16OffAddr alex_table offset else alexIndexInt16OffAddr alex_deflt s in- case new_s of + case new_s of -1# -> (new_acc, input) -- on an error, we want to keep the input *before* the -- character that failed, not after. _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len) -- note that the length is increased ONLY if this is the 1st byte in a char encoding) new_input new_s new_acc-+ } where- check_accs [] = last_acc- check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))- check_accs (AlexAccPred a predx : rest)+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))++ check_accs (AlexAccPred a predx rest) | predx user orig_input (I# (len)) input = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkipPred predx : rest)+ | otherwise+ = check_accs rest+ check_accs (AlexAccSkipPred predx rest) | predx user orig_input (I# (len)) input = AlexLastSkip input (I# (len))- check_accs (_ : rest) = check_accs rest+ | otherwise+ = check_accs rest + data AlexLastAcc a = AlexNone | AlexLastAcc a !AlexInput !Int@@ -496,11 +501,13 @@ fmap f (AlexLastSkip x y) = AlexLastSkip x y data AlexAcc a user- = AlexAcc a+ = AlexAccNone+ | AlexAcc a | AlexAccSkip- | AlexAccPred a (AlexAccPred user)- | AlexAccSkipPred (AlexAccPred user) + | AlexAccPred a (AlexAccPred user) (AlexAcc a user)+ | AlexAccSkipPred (AlexAccPred user) (AlexAcc a user)+ type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool -- -----------------------------------------------------------------------------@@ -525,6 +532,7 @@ -- TODO: there's no need to find the longest -- match when checking the right context, just -- the first match will do.+ -- used by wrappers iUnbox (I# (i)) = i
hprotoc.cabal view
@@ -1,5 +1,5 @@ name: hprotoc-version: 2.0.14+version: 2.0.15 cabal-version: >= 1.6 build-type: Simple license: BSD3@@ -36,7 +36,8 @@ containers, directory >= 1.0.0.1, filepath >= 1.1.0.0,- haskell-src-exts >= 1.7.0,+ haskell-src-exts >= 1.7.0 && <= 1.13.5,+ -- could compile with haskell-src-exts-1.14.0 mtl, parsec, -- parsec < 3,@@ -90,7 +91,7 @@ containers, directory >= 1.0.0.1, filepath >= 1.1.0.0,- haskell-src-exts >= 1.7.0,+ haskell-src-exts >= 1.7.0 && <= 1.13.5, mtl, parsec, utf8-string