packages feed

th-lego 0.2.0.1 → 0.2.1

raw patch · 2 files changed

+51/−1 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ THLego.Lambdas: vlLens :: Name -> Int -> Int -> Exp

Files

library/THLego/Lambdas.hs view
@@ -8,6 +8,56 @@   {-|+Van Larrhoven lens.+-}+vlLens ::+  {-| Constructor name. -}+  Name ->+  {-| Total amount of members. -}+  Int ->+  {-| Index of the member. -}+  Int ->+  {-|+  Lambda expression of the following type:+  +  > forall f. Functor f => (a -> f b) -> s -> f t+  -}+  Exp+vlLens conName numMembers index =+  LamE [onMemberP, productP] exp+  where+    -- Reference implementation:+    -- \ memberMapper (Product a b) -> fmap (\ newMember -> Product newMember b) (memberMapper a)+    onMemberName =+      mkName "memberMapper"+    memberNames =+      fmap alphabeticIndexName (enumFromTo 0 (pred numMembers))+    onMemberP =+      VarP onMemberName+    productP =+      ConP conName pats+      where+        pats =+          fmap VarP memberNames+    exp =+      multiAppE (VarE 'fmap) [setterE, onMemberE]+      where+        setterE =+          LamE [VarP valueName] exp+          where+            valueName =+              mkName "newMember"+            exp =+              multiAppE (ConE conName) (fmap VarE argNames)+              where+                argNames =+                  take index memberNames <>+                  [valueName] <>+                  drop (succ index) memberNames+        onMemberE =+          AppE (VarE onMemberName) (VarE (alphabeticIndexName index))++{-| Simulates lambda-case without the need for extension. -} matcher :: [Match] -> Exp
th-lego.cabal view
@@ -1,5 +1,5 @@ name: th-lego-version: 0.2.0.1+version: 0.2.1 synopsis: Template Haskell construction utilities description:   A collection of templates for the typical patterns appearing