language-dickinson 1.3.0.2 → 1.3.0.3
raw patch · 14 files changed
+177/−66 lines, 14 filesdep ~pretty-simplePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: pretty-simple
API changes (from Hackage documentation)
Files
- CHANGELOG.md +6/−0
- README.md +14/−0
- language-dickinson.cabal +2/−2
- lib/adjectives.dck +4/−0
- lib/noun.dck +8/−0
- run/Main.hs +15/−1
- src/Language/Dickinson/Pipeline.hs +4/−2
- test/data/higherOrder.rename +21/−10
- test/data/lambda.rename +14/−7
- test/data/let.rename +10/−5
- test/data/multiLet.rename +18/−9
- test/data/nestLet.rename +28/−14
- test/data/quoteify.rename +15/−8
- test/data/tupleRename.rename +18/−8
CHANGELOG.md view
@@ -1,5 +1,11 @@ # dickinson +## 1.3.0.3++ * Fall back onto `$HOME/.local/share/man/man1` if manpages were not found in+ cabal data-dir.+ * Bump pretty-simple dependency in test suite+ ## 1.3.0.2 * Sanity checks in pattern match exhaustiveness checker
README.md view
@@ -15,6 +15,16 @@ make install ``` +### Script++There is an install script which will try to download the right release for your+computer:++```bash++curl -sSl https://raw.githubusercontent.com/vmchale/dickinson/master/bash/install.sh | sh -s+```+ ### Source To install, get [cabal-install](https://www.haskell.org/cabal/) and@@ -60,3 +70,7 @@ ``` emd run examples/fortune.dck ```++Other examples are in the+[`examples`](https://github.com/vmchale/dickinson/tree/master/examples)+directory.
language-dickinson.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.0 name: language-dickinson-version: 1.3.0.2+version: 1.3.0.3 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2020 Vanessa McHale@@ -245,7 +245,7 @@ text -any, filepath -any, tasty-golden -any,- pretty-simple -any,+ pretty-simple >=4.0.0.0, language-dickinson -any if impl(ghc >=8.0)
lib/adjectives.dck view
@@ -1,4 +1,5 @@ ; augmented version of madlang library+; English language adjectives (:include color) @@ -13,9 +14,11 @@ (| "poetic") (| "limpid") (| "plain")+ (| "splenetic") (| "bromide") (| "banal") (| "redolent")+ (| "aposematic") (| "artful") (| "anabatic") (| "arid")@@ -25,6 +28,7 @@ (| "antipruritic") (| "elysian") (| "alveated")+ (| "prolix") (| "audacious") (| "autotelic") (| "antediluvian")
lib/noun.dck view
@@ -1,4 +1,5 @@ ; ported and expanded from madlang noun library+; English nouns %- @@ -36,12 +37,19 @@ (| "joke") (| "autocracy") (| "foofaraw")+ (| "supererogation") (| "autonomous") (| "pseudonym") (| "perfidy") (| "heliophagy")+ (| "aril") (| "valedictorian")+ (| "cathexis") (| "apothegm")+ (| "seppo")+ (| "pyxis")+ (| "salp")+ (| "kayfabe") (| "pablum") (| "satori") (| "ardor")
run/Main.hs view
@@ -10,6 +10,8 @@ import Options.Applicative import Paths_language_dickinson (getDataDir) import REPL+import System.Directory (doesFileExist)+import System.Environment (lookupEnv) import System.FilePath ((</>)) -- TODO debug/verbosity options...@@ -88,6 +90,18 @@ modIs is = defaultLibPath <*> ((++) <$> dckPath <*> pure is) +manFind :: IO FilePath+manFind = do+ cabalData <- (</> "emd.1") . (</> "man") <$> getDataDir+ cabalInstall <- doesFileExist cabalData+ if cabalInstall+ then pure cabalData+ else do+ mHome <- lookupEnv "HOME"+ case mHome of+ Just h -> pure $ h </> ".local" </> "share" </> "man" </> "man1" </> "emd.1"+ Nothing -> error "Could not determine home directory! I don't know where your manpages are installed!"+ run :: Act -> IO () run (Run fp is) = do { is' <- modIs is ; TIO.putStrLn =<< pipeline is' fp } run (REPL fps) = dickinsonRepl fps@@ -95,5 +109,5 @@ run (Lint fs) = traverse_ warnFile fs run (Format fp False) = fmtFile fp run (Format fp True) = fmtInplace fp-run Man = putStrLn . (</> "emd.1") . (</> "man") =<< getDataDir+run Man = putStrLn =<< manFind run (Ide fp is) = do { is' <- modIs is ; validateFile is' fp ; warnFile fp }
src/Language/Dickinson/Pipeline.hs view
@@ -18,14 +18,16 @@ import Language.Dickinson.Type import Language.Dickinson.TypeCheck +-- this one is faster with (*>) than 'do' checkEvalM :: (MonadState (EvalSt a) m, MonadError (DickinsonError a) m) => [Declaration a] -> m T.Text-checkEvalM ds = do- validateDecl ds+checkEvalM ds =+ validateDecl ds *> evalDickinsonAsMain ds format :: BSL.ByteString -> T.Text format = prettyText . eitherThrow . parse +-- the 'do'-notation is faster than using *> validateDecl :: (HasTyEnv s, MonadState (s a) m, MonadError (DickinsonError a) m) => [Declaration a] -> m () validateDecl d = do maybeThrow $ checkScope d
test/data/higherOrder.rename view
@@ -5,24 +5,29 @@ { declAnn = () , defName = Name { name = "top" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , defExpr = Lambda { exprAnn = () , lambdaVar = Name { name = "f" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () }- , lambdaTy = TyFun () ( TyText () ) ( TyText () )+ , lambdaTy = TyFun ()+ ( TyText () )+ ( TyText () ) , lambdaExpr = Apply { exprAnn = () , exprFun = Var { exprAnn = () , exprVar = Name { name = "f" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } }@@ -37,7 +42,8 @@ { declAnn = () , defName = Name { name = "main" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } , defExpr = Let@@ -45,14 +51,16 @@ , letBinds = ( Name { name = "fun" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } , Lambda { exprAnn = () , lambdaVar = Name { name = "a" :| []- , unique = Unique { unUnique = 10 }+ , unique = Unique+ { unUnique = 10 } , loc = () } , lambdaTy = TyText ()@@ -67,7 +75,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 10 }+ , unique = Unique+ { unUnique = 10 } , loc = () } }@@ -81,7 +90,8 @@ { exprAnn = () , exprVar = Name { name = "top" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } }@@ -89,7 +99,8 @@ { exprAnn = () , exprVar = Name { name = "fun" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } }
test/data/lambda.rename view
@@ -5,14 +5,16 @@ { declAnn = () , defName = Name { name = "greeter" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , defExpr = Lambda { exprAnn = () , lambdaVar = Name { name = "name" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } , lambdaTy = TyText ()@@ -27,7 +29,8 @@ { exprAnn = () , exprVar = Name { name = "name" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } }@@ -43,7 +46,8 @@ { declAnn = () , defName = Name { name = "main" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , defExpr = Let@@ -51,7 +55,8 @@ , letBinds = ( Name { name = "boy" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } , Choice@@ -79,7 +84,8 @@ { exprAnn = () , exprVar = Name { name = "greeter" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } }@@ -87,7 +93,8 @@ { exprAnn = () , exprVar = Name { name = "boy" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } }
test/data/let.rename view
@@ -5,7 +5,8 @@ { declAnn = () , defName = Name { name = "letBinding" :| []- , unique = Unique { unUnique = 4 }+ , unique = Unique+ { unUnique = 4 } , loc = () } , defExpr = Let@@ -13,7 +14,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , Literal@@ -24,7 +26,8 @@ [ ( Name { name = "b" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , Literal@@ -41,7 +44,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } }@@ -52,7 +56,8 @@ { exprAnn = () , exprVar = Name { name = "b" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } }
test/data/multiLet.rename view
@@ -5,7 +5,8 @@ { declAnn = () , defName = Name { name = "letBinding" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , defExpr = Let@@ -13,7 +14,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } , Literal@@ -24,7 +26,8 @@ [ ( Name { name = "b" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } , Literal@@ -41,7 +44,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } }@@ -52,7 +56,8 @@ { exprAnn = () , exprVar = Name { name = "b" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } }@@ -65,7 +70,8 @@ { declAnn = () , defName = Name { name = "main" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , defExpr = Let@@ -73,7 +79,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } , Literal@@ -89,7 +96,8 @@ { exprAnn = () , exprVar = Name { name = "letBinding" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } }@@ -100,7 +108,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } }
test/data/nestLet.rename view
@@ -5,7 +5,8 @@ { declAnn = () , defName = Name { name = "letBinding" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , defExpr = Let@@ -13,7 +14,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , Let@@ -21,7 +23,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } , Literal@@ -33,7 +36,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 9 }+ , unique = Unique+ { unUnique = 9 } , loc = () } }@@ -42,7 +46,8 @@ [ ( Name { name = "b" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } , Let@@ -50,7 +55,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 10 }+ , unique = Unique+ { unUnique = 10 } , loc = () } , Literal@@ -62,7 +68,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 10 }+ , unique = Unique+ { unUnique = 10 } , loc = () } }@@ -71,7 +78,8 @@ , ( Name { name = "c" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } , Let@@ -79,7 +87,8 @@ , letBinds = ( Name { name = "a" :| []- , unique = Unique { unUnique = 11 }+ , unique = Unique+ { unUnique = 11 } , loc = () } , Literal@@ -91,7 +100,8 @@ { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 11 }+ , unique = Unique+ { unUnique = 11 } , loc = () } }@@ -107,14 +117,16 @@ , letBinds = ( Name { name = "b" :| []- , unique = Unique { unUnique = 12 }+ , unique = Unique+ { unUnique = 12 } , loc = () } , Var { exprAnn = () , exprVar = Name { name = "a" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } }@@ -123,7 +135,8 @@ { exprAnn = () , exprVar = Name { name = "b" :| []- , unique = Unique { unUnique = 12 }+ , unique = Unique+ { unUnique = 12 } , loc = () } }@@ -135,7 +148,8 @@ { exprAnn = () , exprVar = Name { name = "b" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } }
test/data/quoteify.rename view
@@ -5,14 +5,16 @@ { declAnn = () , defName = Name { name = "quote" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , defExpr = Lambda { exprAnn = () , lambdaVar = Name { name = "qu" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } , lambdaTy = TyText ()@@ -20,7 +22,8 @@ { exprAnn = () , lambdaVar = Name { name = "name" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } , lambdaTy = TyText ()@@ -31,20 +34,22 @@ { exprAnn = () , exprVar = Name { name = "qu" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } } , StrChunk { exprAnn = () , chunkText = "- — "+ — " } , Var { exprAnn = () , exprVar = Name { name = "name" :| []- , unique = Unique { unUnique = 8 }+ , unique = Unique+ { unUnique = 8 } , loc = () } }@@ -57,7 +62,8 @@ { declAnn = () , defName = Name { name = "main" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , defExpr = Choice@@ -72,7 +78,8 @@ { exprAnn = () , exprVar = Name { name = "quote" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } }
test/data/tupleRename.rename view
@@ -5,7 +5,8 @@ { declAnn = () , defName = Name { name = "prolix" :| []- , unique = Unique { unUnique = 4 }+ , unique = Unique+ { unUnique = 4 } , loc = () } , defExpr = Let@@ -13,7 +14,8 @@ , letBinds = ( Name { name = "xy" :| []- , unique = Unique { unUnique = 5 }+ , unique = Unique+ { unUnique = 5 } , loc = () } , Literal@@ -25,18 +27,22 @@ { exprAnn = () , lambdaVar = Name { name = "xy" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } , lambdaTy = TyTuple ()- ( TyText () :| [ TyText () ] )+ ( TyText () :|+ [ TyText () ]+ ) , lambdaExpr = Match { exprAnn = () , exprMatch = Var { exprAnn = () , exprVar = Name { name = "xy" :| []- , unique = Unique { unUnique = 6 }+ , unique = Unique+ { unUnique = 6 } , loc = () } }@@ -47,17 +53,21 @@ { patAnn = () , patName = Name { name = "x" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } } :|- [ Wildcard { patAnn = () } ]+ [ Wildcard+ { patAnn = () }+ ] } , Var { exprAnn = () , exprVar = Name { name = "x" :| []- , unique = Unique { unUnique = 7 }+ , unique = Unique+ { unUnique = 7 } , loc = () } }