packages feed

binder 0.2.1 → 0.3

raw patch · 3 files changed

+23/−5 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Binder: copyVar :: MonadNumbering m => Var m b -> (Var m a -> m a) -> m (Var m a)
+ Data.Binder: copyVarList :: MonadNumbering m => VarList m b -> (Var m a -> m a) -> m (VarList m a)
- Data.Binder: binder'Body :: forall a_a8HJ m_a8HK b_a8HL b_a9tQ. Lens (Binder a_a8HJ m_a8HK b_a8HL) (Binder a_a8HJ m_a8HK b_a9tQ) (a_a8HJ -> m_a8HK b_a8HL) (a_a8HJ -> m_a8HK b_a9tQ)
+ Data.Binder: binder'Body :: forall a_a8HL m_a8HM b_a8HN b_a9vI. Lens (Binder a_a8HL m_a8HM b_a8HN) (Binder a_a8HL m_a8HM b_a9vI) (a_a8HL -> m_a8HM b_a8HN) (a_a8HL -> m_a8HM b_a9vI)
- Data.Binder: binder'Name :: forall a_a8HJ m_a8HK b_a8HL. Lens' (Binder a_a8HJ m_a8HK b_a8HL) Text
+ Data.Binder: binder'Name :: forall a_a8HL m_a8HM b_a8HN. Lens' (Binder a_a8HL m_a8HM b_a8HN) Text
- Data.Binder: binder'mkFree :: forall a_a8HJ m_a8HK b_a8HL. Lens' (Binder a_a8HJ m_a8HK b_a8HL) (Var m_a8HK a_a8HJ -> m_a8HK a_a8HJ)
+ Data.Binder: binder'mkFree :: forall a_a8HL m_a8HM b_a8HN. Lens' (Binder a_a8HL m_a8HM b_a8HN) (Var m_a8HM a_a8HL -> m_a8HM a_a8HL)
- Data.Binder: binderList'Body :: forall a_a9ut m_a9uu b_a9uv b_a9RA. Lens (BinderList a_a9ut m_a9uu b_a9uv) (BinderList a_a9ut m_a9uu b_a9RA) ([a_a9ut] -> m_a9uu b_a9uv) ([a_a9ut] -> m_a9uu b_a9RA)
+ Data.Binder: binderList'Body :: forall a_a9wm m_a9wn b_a9wo b_a9Uq. Lens (BinderList a_a9wm m_a9wn b_a9wo) (BinderList a_a9wm m_a9wn b_a9Uq) ([a_a9wm] -> m_a9wn b_a9wo) ([a_a9wm] -> m_a9wn b_a9Uq)
- Data.Binder: binderList'Names :: forall a_a9ut m_a9uu b_a9uv. Lens' (BinderList a_a9ut m_a9uu b_a9uv) [Text]
+ Data.Binder: binderList'Names :: forall a_a9wm m_a9wn b_a9wo. Lens' (BinderList a_a9wm m_a9wn b_a9wo) [Text]
- Data.Binder: binderList'mkFree :: forall a_a9ut m_a9uu b_a9uv. Lens' (BinderList a_a9ut m_a9uu b_a9uv) (Var m_a9uu a_a9ut -> m_a9uu a_a9ut)
+ Data.Binder: binderList'mkFree :: forall a_a9wm m_a9wn b_a9wo. Lens' (BinderList a_a9wm m_a9wn b_a9wo) (Var m_a9wn a_a9wm -> m_a9wn a_a9wm)
- Data.Binder: newVar :: forall m a. MonadNumbering m => Text -> (Var m a -> m a) -> m (Var m a)
+ Data.Binder: newVar :: MonadNumbering m => Text -> (Var m a -> m a) -> m (Var m a)

Files

CHANGELOG.md view
@@ -2,6 +2,11 @@  ## version 0 +### 0.3 -- 2023-10-09++* Add new functions `copyVar` and `copyVarList`.+* `newVarList`: Refactoring.+ ### 0.2.1 -- 2023-10-09  * Expose the functions `unbind2` and `unbind2List`.
binder.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.0 name:               binder-version:            0.2.1+version:            0.3 synopsis:           Variable binding for abstract syntax tree description:     binder is purely functional implementation of Ocaml's@@ -29,7 +29,7 @@ source-repository this     type:     git     location: https://github.com/ijaketak/binder-    tag:      v0.2.1+    tag:      v0.3  common depends     build-depends:
src/Data/Binder.hs view
@@ -32,6 +32,7 @@   , nameOf   , boxVar   , newVar+  , copyVar   , isClosed   , occur -- ** Box@@ -69,6 +70,7 @@   , namesOf   , boxVarList   , newVarList+  , copyVarList -- * Binder for list   , BinderList   , binderList'Names@@ -164,16 +166,24 @@ boxVar x = x ^. var'Box  -- | Create a new variable with given name.-newVar :: forall m a. MonadNumbering m => Text -> (Var m a -> m a) -> m (Var m a)+newVar :: MonadNumbering m => Text -> (Var m a -> m a) -> m (Var m a) newVar name mkFree = do   i <- numbering+  buildVar i name mkFree++copyVar :: MonadNumbering m => Var m b -> (Var m a -> m a) -> m (Var m a)+copyVar x mkFree = buildVar (x ^. var'Key) (x ^. var'Name) mkFree++buildVar :: MonadNumbering m => Numbering m -> Text -> (Var m a -> m a)+         -> m (Var m a)+buildVar i name mkFree =   let x = let b = Box'Env                 (M.singleton i $ AnyVar x)                 (Closure $ \env ->                   let f (AnyOne y) = pure $ unsafeCoerce y                    in f $ fromJust $ M.lookup i env)            in Var i $ VarBody name mkFree b-  return x+   in return x   -- | 'Box' is closed if it exposes no free variables.@@ -317,7 +327,10 @@  -- | Create new variables with given names. newVarList :: MonadNumbering m => [Text] -> (Var m a -> m a) -> m (VarList m a)-newVarList names mkFree = sequence $ flip fmap names $ \name -> newVar name mkFree+newVarList names mkFree = flip traverse names $ flip newVar mkFree++copyVarList :: MonadNumbering m => VarList m b -> (Var m a -> m a) -> m (VarList m a)+copyVarList xs mkFree = flip traverse xs $ flip copyVar mkFree   -- | Essentially, @BinderList a m b@ means @[a] -> m b@.