packages feed

yasi 0.0.0.1 → 0.1.0.0

raw patch · 6 files changed

+20/−4 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Yasi.Internal: ShowAbs :: Segment

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for yasi +## 0.1.0.0 -- 2021-02-13++ * Support `show` abstractions+ ## 0.0.0.1 -- 2021-02-13   * Support older GHC versions
src/Yasi.hs view
@@ -35,5 +35,7 @@ -- -- >>> let x = 1 + 1 in [i|1 + 1 = ${show x}|] :: ByteString -- "1 + 1 = 2"+-- >>> [i|2 + 2 = $show|] (2 + 2) :: Text+-- "2 + 2 = 4" i :: TH.QuasiQuoter i = interpolator '$' pure pure
src/Yasi/Internal.hs view
@@ -33,11 +33,13 @@   | Var String   | ShowVar String   | Abs -- idea due to interpolate+  | ShowAbs   deriving (Show, Eq, Generic)  parseSegments :: MonadFail m => Char -> String -> m [Segment] parseSegments c = fmap (group []) . go   where+    -- rewrite this     go s       | let (lit, rest) = span (/= c) s, not (null lit) = (Lit lit :) <$> go rest       | s == "" = pure []@@ -47,6 +49,7 @@         (var, '}' : rest) ->           let seg = case var of                 "" -> Abs+                "show" -> ShowAbs                 's' : 'h' : 'o' : 'w' : ' ' : var -> ShowVar var                 var -> Var var            in (seg :) <$> go rest@@ -54,7 +57,9 @@       | _ : v : rest' <- s,         isVarStartChar v =         let (vs, rest) = span isVarChar rest'-         in (Var (v : vs) :) <$> go rest+            var = v : vs+            s = if var == "show" then ShowAbs else Var var+         in (s :) <$> go rest       | otherwise = fail $ "invalid char after " <> [c]     isVarStartChar v = C.isAscii v && C.isAlpha v     isVarChar v = C.isAscii v && (C.isAlphaNum v || v == '_' || v == '\'')@@ -79,6 +84,9 @@         Abs -> do           n <- TH.newName "int"           pure (TH.VarE n, TH.LamE [TH.VarP n])+        ShowAbs -> do+          n <- TH.newName "showint"+          pure (TH.AppE (TH.VarE 'show) $ TH.VarE n, TH.LamE [TH.VarP n])     prep asg af = do       (as, g) <- asg       (a, f) <- af
test/Interpolations.hs view
@@ -30,8 +30,8 @@         let p = T.encodeUtf8 "℘"         [i|℘$a℘$b℘$c℘|] === p <> a <> p <> T.encodeUtf8 b <> p <> T.encodeUtf8 (T.pack c) <> p,       testProperty "abstractions" . property $ do-        (a, b) <- (,) <$> forAll genText <*> forAll genText-        [i|xxx-${}${}-yyy|] a b === "xxx-" <> a <> b <> "-yyy"+        (a, b) <- (,) <$> forAll genText <*> forAll (Gen.integral $ Range.constant 0 1000)+        [i|xxx-${}$show-yyy|] a (b :: Int) === "xxx-" <> a <> T.pack (show b) <> "-yyy"     ]   where     genString = Gen.string range Gen.unicodeAll
test/Segments.hs view
@@ -21,5 +21,7 @@   ps "${foobar]" @?= Nothing   ps "test-$0foo" @?= Nothing   ps "${show }" @?= Just [ShowVar ""]+  ps "${show}" @?= Just [ShowAbs]+  ps "$show" @?= Just [ShowAbs]   where     ps = parseSegments '$'
yasi.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: yasi-version: 0.0.0.1+version: 0.1.0.0  synopsis: Yet another string interpolator description: