language-dickinson 1.4.3.0 → 1.4.3.1
raw patch · 17 files changed
+124/−115 lines, 17 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- Paths_language_dickinson: getBinDir :: IO FilePath
- Paths_language_dickinson: getDataDir :: IO FilePath
- Paths_language_dickinson: getDataFileName :: FilePath -> IO FilePath
- Paths_language_dickinson: getDynLibDir :: IO FilePath
- Paths_language_dickinson: getLibDir :: IO FilePath
- Paths_language_dickinson: getLibexecDir :: IO FilePath
- Paths_language_dickinson: getSysconfDir :: IO FilePath
- Paths_language_dickinson: version :: Version
- Language.Dickinson: class () => HasRenames a
+ Language.Dickinson: class HasRenames a
- Language.Dickinson: data () => AlexPosn
+ Language.Dickinson: data AlexPosn
- Language.Dickinson: data () => Builtin
+ Language.Dickinson: data Builtin
- Language.Dickinson: data () => Declaration a
+ Language.Dickinson: data Declaration a
- Language.Dickinson: data () => Dickinson a
+ Language.Dickinson: data Dickinson a
- Language.Dickinson: data () => DickinsonTy a
+ Language.Dickinson: data DickinsonTy a
- Language.Dickinson: data () => Expression a
+ Language.Dickinson: data Expression a
- Language.Dickinson: data () => Name a
+ Language.Dickinson: data Name a
- Language.Dickinson: data () => ParseError a
+ Language.Dickinson: data ParseError a
- Language.Dickinson: data () => Pattern a
+ Language.Dickinson: data Pattern a
- Language.Dickinson: data () => Token a
+ Language.Dickinson: data Token a
Files
- CHANGELOG.md +4/−0
- doc/user-guide.pdf binary
- examples/axolotlsay.dck +10/−0
- examples/fortune.dck +1/−0
- examples/starwars.dck +3/−0
- language-dickinson.cabal +4/−6
- lib/adjectives.dck +11/−0
- lib/noun.dck +22/−0
- lib/profession.dck +1/−0
- man/emd.1 +46/−75
- src/Language/Dickinson/Check/Duplicate.hs +4/−4
- src/Language/Dickinson/Eval.hs +7/−7
- src/Language/Dickinson/Import.hs +1/−1
- src/Language/Dickinson/Lexer.x +3/−10
- src/Language/Dickinson/Pattern/Useless.hs +1/−1
- src/Language/Dickinson/Rename.hs +4/−9
- src/Language/Dickinson/TypeCheck.hs +2/−2
CHANGELOG.md view
@@ -1,5 +1,9 @@ # dickinson +## 1.4.3.1++ * `base` catch-up+ ## 1.4.3.0 * REPL tab-completions no longer hang indefinitely
doc/user-guide.pdf view
binary file changed (193108 → 197567 bytes)
+ examples/axolotlsay.dck view
@@ -0,0 +1,10 @@+%-++(:def axolotlsay+ (:lambda txt text+ '''+ ${txt}+ ----+ /+ ≽(◕ ᴗ ◕)≼+ '''))
examples/fortune.dck view
@@ -31,6 +31,7 @@ (| "Hunger is hope.") (| "Spurn your family.") (| "Salvation is finality.")+ (| "Comfort leads to complacency.") (| "If you go outside today, you will become nauseous") (| "Knowledge begets humility.") (| "Mushrooms are made of flesh.")
examples/starwars.dck view
@@ -18,9 +18,12 @@ (:oneof (| "Yert") (| "Wam")+ (| "Cass")+ (| "Jetta") (| "Pommet") (| "Hodnar") (| "Po")+ (| "Bik") (| "Jelk") (| "Boba") (| "Orchi")
language-dickinson.cabal view
@@ -1,14 +1,11 @@ cabal-version: 2.0 name: language-dickinson-version: 1.4.3.0+version: 1.4.3.1 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2020, 2022 Vanessa McHale maintainer: vamchale@gmail.com author: Vanessa McHale-tested-with:- ghc ==8.0.2 ghc ==8.2.2 ghc ==8.4.4 ghc ==8.6.5 ghc ==8.8.4- ghc ==8.10.7 ghc ==9.0.2 ghc ==9.2.2 synopsis: A language for generative literature description: Dickinson is a language for generative (random) literature@@ -56,7 +53,7 @@ default-language: Haskell2010 ghc-options: -Wall build-depends:- base >=4.9 && <5,+ base >=4.19.0.0 && <5, dickinson if !flag(cross)@@ -128,6 +125,7 @@ DeriveAnyClass DeriveFunctor DeriveGeneric FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving OverloadedStrings StandaloneDeriving TupleSections DeriveDataTypeable+ TransformListComp ghc-options: -Wall -O2 -fstatic-argument-transformation build-depends:@@ -150,7 +148,7 @@ split if !flag(cross)- build-tool-depends: alex:alex, happy:happy+ build-tool-depends: alex:alex >=3.5.0.0, happy:happy if !impl(ghc >=8.0) build-depends: semigroups
lib/adjectives.dck view
@@ -28,6 +28,7 @@ (| "noisome") (| "baneful") (| "auxetic")+ (| "fulgurant") (| "bromide") (| "bolshie") (| "murine")@@ -91,6 +92,7 @@ (| "bitter") (| "cross") (| "crapulous")+ (| "etiolated") (| "confutative") (| "campy") (| "cavicorn")@@ -128,6 +130,8 @@ (| "cheerful") (| "common") (| "doxastic")+ (| "refulgent")+ (| "effulgent") (| "demonifugic") (| "dolorous") (| "dainty")@@ -135,6 +139,8 @@ (| "devoted") (| "dramatic") (| "demented")+ (| "feculent")+ (| "banausic") (| "dark") (| "drained") (| "deep")@@ -394,6 +400,7 @@ (| "lugubrious") (| "laodicean") (| "lazy")+ (| "epicene") (| "quiescent") (| "quaggy") (| "queasy")@@ -497,6 +504,7 @@ (| "wroth") (| "wretched") (| "wiry")+ (| "encaustic") (| "withering") (| "wizened") (| "warmhearted")@@ -514,9 +522,11 @@ (| "yonic") (| "yellow") (| "yankee")+ (| "parlous") (| "young") (| "zippy") (| "zaftig")+ (| "sessile") (| "zygodactyl") (| "zaddy") (| "zetetic")@@ -524,5 +534,6 @@ (| "zesty") (| "pithy") (| "diaphanous")+ (| "nugatory") (| "orotund") (| "stentorian"))))
lib/noun.dck view
@@ -24,6 +24,7 @@ (| "scansion") (| "assonance") (| "sabbing")+ (| "nixtamalization") (| "adynaton") (| "aposiopesis") (| "asyndeton")@@ -200,7 +201,9 @@ (| "catchment") (| "cacozelia") (| "codicil")+ (| "peccadillo") (| "bolus")+ (| "assiduity") (| "bole") (| "calomel") (| "polysemy")@@ -222,6 +225,7 @@ (| "limner") (| "kenjataimu") (| "perspicuity")+ (| "boustrophedon") (| "wisteria") (| "cephalophore") (| "recalcitrant")@@ -236,7 +240,9 @@ (| "diacope") (| "philatelist") (| "panegyric")+ (| "scoleciphobia") (| "nosocomial")+ (| "crozier") (| "tmesis") (| "skete") (| "prig")@@ -261,6 +267,7 @@ (| "aspic") (| "cachexia") (| "thaumaturge")+ (| "hoosegow") (| "epicaricacy") (| "schorl") (| "velleity")@@ -316,6 +323,7 @@ (| "baculum") (| "skeuomorphism") (| "epitaph")+ (| "fiacre") (| "tensor") (| "hypotaxis") (| "parataxis")@@ -334,6 +342,7 @@ (| "murmuration") (| "Lagrangian") (| "Hamiltonian")+ (| "hamartia") (| "aneurysm") (| "gleet") (| "synagogue")@@ -364,6 +373,7 @@ (| "piano") (| "roke") (| "shebang")+ (| "gonif") (| "sheet") (| "cornice") (| "chancroid")@@ -373,6 +383,7 @@ (| "egregore") (| "cretin") (| "calumny")+ (| "schizocarp") (| "vermeil") (| "xoanon") (| "rancor")@@ -395,9 +406,11 @@ (| "caltrop") (| "calque") (| "diet")+ (| "misoneism") (| "ether") (| "xylem") (| "obreptition")+ (| "caliology") (| "phlogiston") (| "poop") (| "turd")@@ -406,6 +419,7 @@ (| "salmon") (| "crappie") (| "exhibitionist")+ (| "pyknosis") (| "fetish") (| "fetishist") (| "cult")@@ -420,6 +434,7 @@ (| "latex") (| "jeremiad") (| "sitiogonic")+ (| "froufrou") (| "isopsephy") (| "apotheosis") (| "aphelion")@@ -427,9 +442,16 @@ (| "thurible") (| "perihelion") (| "bleb")+ (| "quean")+ (| "hallion")+ (| "apophenia")+ (| "declivity")+ (| "tacenda") ; plural only (| "cabochon")+ (| "panjandrum") (| "sortition") (| "stotting")+ (| "stye") (| "weft") (| "tenesmus") (| "folderol"))))
lib/profession.dck view
@@ -4,6 +4,7 @@ (:oneof (| "professor") (| "psychiatrist")+ (| "equerry") (| "physician") (| "poet") (| "psychologist")
man/emd.1 view
@@ -1,137 +1,108 @@-.\" Automatically generated by Pandoc 2.18+.\" Automatically generated by Pandoc 3.2 .\"-.\" Define V font for inline verbatim, using C font in formats-.\" that render this, and otherwise B font.-.ie "\f[CB]x\f[]"x" \{\-. ftr V B-. ftr VI BI-. ftr VB B-. ftr VBI BI-.\}-.el \{\-. ftr V CR-. ftr VI CI-. ftr VB CB-. ftr VBI CBI-.\} .TH "emd (1)" "" "" "" ""-.hy .SH NAME-.PP-emd - [Emily] Dickinson+emd \- [Emily] Dickinson .SH DESCRIPTION-.PP-\f[B]Dickinson\f[R] is a text-generation language+\f[B]Dickinson\f[R] is a text\-generation language .SH SYNOPSIS-.PP emd fortune.dck .PP emd repl .PP emd run literature.dck .PP-emd run project.dck --include lib+emd run project.dck \-\-include lib .PP man $(emd man) .SS SHEBANG-.PP-Dickinson ignores lines starting with \f[V]#!\f[R] so we can put+Dickinson ignores lines starting with \f[CR]#!\f[R] so we can put .IP-.nf-\f[C]+.EX #!/usr/bin/env emd-\f[R]-.fi+.EE .PP-at the top of a file and \f[V]emd\f[R] will be used as an interpreter.+at the top of a file and \f[CR]emd\f[R] will be used as an interpreter. .SH SUBCOMMANDS-.PP-\f[B]repl\f[R] - Start a repl+\f[B]repl\f[R] \- Start a repl .PP-\f[B]run\f[R] - Run a file+\f[B]run\f[R] \- Run a file .PP-\f[B]check\f[R] - Check that a program is correct without running it+\f[B]check\f[R] \- Check that a program is correct without running it .PP-\f[B]lint\f[R] - Give suggestions for common mistakes+\f[B]lint\f[R] \- Give suggestions for common mistakes .PP-\f[B]fmt\f[R] - Format Dickinson code+\f[B]fmt\f[R] \- Format Dickinson code .PP-\f[B]man\f[R] - Point to where manpages are installed+\f[B]man\f[R] \- Point to where manpages are installed .SS REPL COMMANDS-.PP-\f[B]:save\f[R] - Save curent state in a file+\f[B]:save\f[R] \- Save curent state in a file .PP-\f[B]:l\f[R] \f[B]:load\f[R] - Load a file+\f[B]:l\f[R] \f[B]:load\f[R] \- Load a file .PP-\f[B]:r\f[R] - Restore a REPL state stored in a file+\f[B]:r\f[R] \- Restore a REPL state stored in a file .PP-\f[B]:q\f[R] \f[B]:quit\f[R] - Quit session+\f[B]:q\f[R] \f[B]:quit\f[R] \- Quit session .PP-\f[B]:list\f[R] - List all names that are in scope+\f[B]:list\f[R] \- List all names that are in scope .PP-\f[B]:t\f[R] \f[B]:type\f[R] - Display the type of an expression+\f[B]:t\f[R] \f[B]:type\f[R] \- Display the type of an expression .PP-\f[B]:v\f[R] \f[B]:view\f[R] - Show the definition of a name+\f[B]:v\f[R] \f[B]:view\f[R] \- Show the definition of a name .PP-\f[B]:h\f[R] \f[B]:help\f[R] - Display help+\f[B]:h\f[R] \f[B]:help\f[R] \- Display help .SH OPTIONS .TP-\f[B]-h\f[R] \f[B]--help\f[R]+\f[B]\-h\f[R] \f[B]\-\-help\f[R] Display help .TP-\f[B]-V\f[R] \f[B]--version\f[R]+\f[B]\-V\f[R] \f[B]\-\-version\f[R] Display version information .TP-\f[B]-I\f[R] \f[B]--include\f[R]+\f[B]\-I\f[R] \f[B]\-\-include\f[R] Directory to search for libraries .SH INFLUENTIAL ENVIRONMENT VARIABLES-.PP-\f[V]DCK_PATH\f[R] - a colon-separated list of directories to search+\f[CR]DCK_PATH\f[R] \- a colon\-separated list of directories to search .SH EDITOR INTEGRATION-.PP A vim plugin is available; see .PP https://github.com/vmchale/dickinson/tree/master/vim .SS CTAGS-.PP-To configure exuberant ctags or universal ctags, put+To configure universal ctags, put .IP-.nf-\f[C]---langdef=DICKINSON---langmap=DICKINSON:.dck---regex-DICKINSON=/:def *([[:lower:]][[:alnum:]]+)/\[rs]1/f,function/---regex-DICKINSON=/tydecl *([[:lower:]][[:alnum:]]+) *=/\[rs]1/t,type/-\f[R]-.fi+.EX+\-\-langdef=DICKINSON+\-\-langmap=DICKINSON:.dck+\-\-regex\-DICKINSON=/:def *([[:lower:]][[:alnum:]]+)/\[rs]1/f,function/+\-\-regex\-DICKINSON=/tydecl *([[:lower:]][[:alnum:]]+) *=/\[rs]1/t,type/+\-\-regex\-DICKINSON=/= *([[:upper:]][[:alnum:]_]+)/\[rs]1/t,type/+\-\-regex\-DICKINSON=/\[ha][\[ha]\[rs][]*\[rs]| *([[:upper:]][[:alnum:]_]+)/\[rs]1/t,type/+.EE .PP-in the project .ctags+in \[ti]/.ctags.d/dickinson.ctags .SH SHELL COMPLETIONS-.PP To get shell completions in your current session: .IP-.nf-\f[C]-eval \[dq]$(emd --bash-completion-script emd)\[dq]-\f[R]-.fi+.EX+eval \[dq]$(emd \-\-bash\-completion\-script emd)\[dq]+.EE .PP-Put this in your \f[V]\[ti]/.bashrc\f[R] or-\f[V]\[ti]/.bash_profile\f[R] to install them.+Put this in your \f[CR]\[ti]/.bashrc\f[R] or+\f[CR]\[ti]/.bash_profile\f[R] to install them. .PP Shell completions are also available for fish and zsh; to get them: .PP-\f[V]emd --fish-completion-script emd\f[R]+\f[CR]emd \-\-fish\-completion\-script emd\f[R] .PP-\f[V]emd --zsh-completion-script emd\f[R]+\f[CR]emd \-\-zsh\-completion\-script emd\f[R] .SH BUGS-.PP Please report any bugs you may come across to https://github.com/vmchale/dickinson/issues. .SH COPYRIGHT-.PP Copyright 2020. Vanessa McHale. All Rights Reserved. .SH AUTHORS-Vanessa McHale<vamchale@gmail.com>.+Vanessa McHale\c+.MT vamchale@gmail.com+.ME \c.
src/Language/Dickinson/Check/Duplicate.hs view
@@ -1,21 +1,21 @@+{-# LANGUAGE TransformListComp #-}+ module Language.Dickinson.Check.Duplicate ( checkDuplicates ) where import Control.Applicative ((<|>)) import Data.Foldable (toList) import Data.Foldable.Ext (foldMapAlternative)-import Data.Function (on)-import Data.List (groupBy, sortBy) import Data.Maybe (mapMaybe) import qualified Data.Text as T+import GHC.Exts (groupWith, sortWith) import Language.Dickinson.Error import Language.Dickinson.Type -- TODO: duplicate check better? hm--- FIXME: HashSet or whatever? checkNames :: [(a, T.Text)] -> Maybe (DickinsonWarning a)-checkNames ns = foldMapAlternative announce (groupBy ((==) `on` snd) $ sortBy (compare `on` snd) ns)+checkNames ns = foldMapAlternative announce [ zip l x | (l, x) <- ns, then sortWith by x, then group by x using groupWith ] where announce (_:(l, y):_) = Just $ DuplicateStr l y announce _ = Nothing
src/Language/Dickinson/Eval.hs view
@@ -37,7 +37,7 @@ import Language.Dickinson.Type import Language.Dickinson.TypeCheck import Language.Dickinson.Unique-import Lens.Micro (Lens', over, set, _1)+import Lens.Micro (Lens', _1, over, set) import Lens.Micro.Mtl (modifying, use, (.=)) import Prettyprinter (Doc, Pretty (..), vsep, (<+>)) @@ -217,7 +217,7 @@ tryEvalExpressionM c@Constructor{} = pure c tryEvalExpressionM (Bind _ bs e) = do let ns = fst <$> bs- newBs <- traverse tryEvalExpressionM (snd <$> bs)+ newBs <- traverse (tryEvalExpressionM.snd) bs let stMod = thread $ fmap (uncurry nameMod) (NE.zip ns newBs) withSt stMod $ tryEvalExpressionM e@@ -252,7 +252,7 @@ evalExpressionM e evalExpressionM (Bind _ bs e) = do let ns = fst <$> bs- newBs <- traverse evalExpressionM (snd <$> bs)+ newBs <- traverse (evalExpressionM.snd) bs let stMod = thread $ fmap (uncurry nameMod) (NE.zip ns newBs) withSt stMod $ evalExpressionM e@@ -343,7 +343,7 @@ resolveFlattenM (Var _ n) = resolveFlattenM =<< lookupName n resolveFlattenM (Choice l pes) = do let ps = fst <$> pes -- TODO: do these need to be renamed- es <- traverse resolveFlattenM (snd <$> pes)+ es <- traverse (resolveFlattenM.snd) pes pure $ Choice l (NE.zip ps es) resolveFlattenM (Interp l es) = Interp l <$> traverse resolveFlattenM es resolveFlattenM (MultiInterp l es) = MultiInterp l <$> traverse resolveFlattenM es@@ -351,7 +351,7 @@ resolveFlattenM (Tuple l es) = Tuple l <$> traverse resolveFlattenM es resolveFlattenM (Bind _ bs e) = do let ns = fst <$> bs- newBs <- traverse resolveFlattenM (snd <$> bs)+ newBs <- traverse (resolveFlattenM.snd) bs let stMod = thread $ fmap (uncurry nameMod) (NE.zip ns newBs) withSt stMod $ resolveFlattenM e@@ -393,7 +393,7 @@ resolveExpressionM v@(Var _ n) = maybe (pure v) resolveExpressionM =<< tryLookupName n resolveExpressionM (Choice l pes) = do let ps = fst <$> pes- es <- traverse resolveExpressionM (snd <$> pes)+ es <- traverse (resolveExpressionM.snd) pes pure $ Choice l (NE.zip ps es) resolveExpressionM (Interp l es) = Interp l <$> traverse resolveExpressionM es resolveExpressionM (MultiInterp l es) = MultiInterp l <$> traverse resolveExpressionM es@@ -401,7 +401,7 @@ resolveExpressionM (Tuple l es) = Tuple l <$> traverse resolveExpressionM es resolveExpressionM (Bind _ bs e) = do let ns = fst <$> bs- newBs <- traverse resolveExpressionM (snd <$> bs)+ newBs <- traverse (resolveExpressionM.snd) bs let stMod = thread $ fmap (uncurry nameMod) (NE.zip ns newBs) withSt stMod $ resolveExpressionM e
src/Language/Dickinson/Import.hs view
@@ -25,4 +25,4 @@ . fmap (</> getFileName n) $ incl getFileName :: Name a -> FilePath-getFileName = (<> ".dck") . foldr (</>) mempty . fmap T.unpack . name+getFileName = (<> ".dck") . foldr ((</>) . T.unpack) mempty . name
src/Language/Dickinson/Lexer.x view
@@ -167,7 +167,7 @@ exitInterp :: Alex () exitInterp = do- (_,iSt:_,_,_) <- get_ust+ (_,iSt:_,_,_) <- alexGetUserState case iSt of InStr -> set_scd string InMultiStr -> set_scd multiStr@@ -176,10 +176,6 @@ set_scd st = Alex (Right . (go &&& (const ()))) where go s = s { alex_scd = st } -set_ust :: AlexUserState -> Alex ()-set_ust st = Alex (Right . (go &&& (const ())))- where go s = s { alex_ust = st }- mod_ust :: (AlexUserState -> AlexUserState) -> Alex () mod_ust f = Alex (Right . (go &&& (const ()))) where go s = s { alex_ust = f (alex_ust s) }@@ -187,9 +183,6 @@ gets_alex :: (AlexState -> a) -> Alex a gets_alex f = Alex (Right . (id &&& f)) -get_ust :: Alex AlexUserState-get_ust = gets_alex alex_ust- get_pos :: Alex AlexPosn get_pos = gets_alex alex_pos @@ -218,9 +211,9 @@ newIdentAlex :: AlexPosn -> T.Text -> Alex (Name AlexPosn) newIdentAlex pos t = do- st <- get_ust+ st <- alexGetUserState let (st', n) = newIdent pos t st- set_ust st' $> (n $> pos)+ alexSetUserState st' $> (n $> pos) newIdent :: AlexPosn -> T.Text -> AlexUserState -> (AlexUserState, Name AlexPosn) newIdent pos t pre@(max', scd, names, uniqs) = {-# SCC "newIdent" #-}
src/Language/Dickinson/Pattern/Useless.hs view
@@ -148,7 +148,7 @@ case cont of NotComplete -> usefulMaranget env (defaultMatrix ps) qs CompleteTuple n -> usefulMaranget env (specializeTuple n ps) (specializeTupleVector n q qs)- CompleteTags ns -> or $ fmap (\n -> usefulMaranget env (specializeTag n (forget ps)) (fmap void qs)) ns+ CompleteTags ns -> any (\n -> usefulMaranget env (specializeTag n (forget ps)) (fmap void qs)) ns specializeTupleVector :: Int -> Pattern a -> [Pattern a] -> [Pattern a] specializeTupleVector n p ps = {-# SCC "specializeTupleVector" #-} replicate n p ++ ps
src/Language/Dickinson/Rename.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE TupleSections #-} module Language.Dickinson.Rename ( renameDickinson- , renameDickinsonM , renameDeclarationsM , renameDeclarationM , renameExpressionM@@ -22,6 +21,7 @@ import Control.Monad.State (MonadState, State, runState) import Data.Bifunctor (second) import Data.Binary (Binary)+import qualified Data.Functor as Fun import qualified Data.IntMap as IM import qualified Data.List.NonEmpty as NE import Data.Text.Prettyprint.Doc.Ext@@ -182,12 +182,7 @@ -> Expression a -> m (Expression a) renameLet constructor p bs e = do- newBs <- traverse withName (fst <$> bs)- let localRenames = snd <$> newBs- newBinds = thread localRenames- newNames = fst <$> newBs- preNewBound = snd <$> bs- newBound <-- traverse renameExpressionM preNewBound- withRenames newBinds $+ (newNames, localRenames) <- Fun.unzip <$> traverse (withName.fst) bs+ newBound <- traverse (renameExpressionM.snd) bs+ withRenames (thread localRenames) $ constructor p (NE.zip newNames newBound) <$> renameExpressionM e
src/Language/Dickinson/TypeCheck.hs view
@@ -128,7 +128,7 @@ forM_ (fst <$> brs) $ \p -> {-# SCC "bindPattern" #-} bindPattern p ty res <- typeOf e'- traverse_ (tyAssert res) (snd <$> brs)+ traverse_ (tyAssert res.snd) brs pure res typeOf (Flatten _ e) = typeOf e typeOf (Annot _ e ty) =@@ -148,7 +148,7 @@ -> Expression a -> m (DickinsonTy a) tyLet bs e = do- es' <- traverse typeOf (snd <$> bs)+ es' <- traverse (typeOf.snd) bs let ns = fst <$> bs Ext.zipWithM_ tyInsert ns es' typeOf e