clash-lib 0.6.11 → 0.6.12
raw patch · 3 files changed
+24/−1 lines, 3 files
Files
- CHANGELOG.md +4/−0
- clash-lib.cabal +1/−1
- src/CLaSH/Normalize/Transformations.hs +19/−0
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog for the [`clash-lib`](http://hackage.haskell.org/package/clash-lib) package +## 0.6.12 *March 14th 2016*+* Fixes bugs:+ * Not all lambda's in a function position removed due to bad eta-expansion [#132](https://github.com/clash-lang/clash-compiler/issues/132)+ ## 0.6.11 *March 11th 2016* * New features: * Add support for HDL synthesis tool specific HDL generation
clash-lib.cabal view
@@ -1,5 +1,5 @@ Name: clash-lib-Version: 0.6.11+Version: 0.6.12 Synopsis: CAES Language for Synchronous Hardware - As a Library Description: CλaSH (pronounced ‘clash’) is a functional hardware description language that
src/CLaSH/Normalize/Transformations.hs view
@@ -764,6 +764,25 @@ e' <- etaExpansionTL (LamBody bndr:ctx) e return $ Lam (bind bndr e') +etaExpansionTL ctx (Letrec b) = do+ (xesR,e) <- unbind b+ let xes = unrec xesR+ bndrs = map fst xes+ e' <- etaExpansionTL (LetBody bndrs:ctx) e+ e'' <- stripLambda e'+ case e'' of+ (bs@(_:_),e2) -> do+ let e3 = Letrec (bind xesR e2)+ changed (mkLams e3 bs)+ _ -> return (Letrec (bind xesR e'))+ where+ stripLambda :: Term -> RewriteMonad NormalizeState ([Id],Term)+ stripLambda (Lam b') = do+ (bndr,e) <- unbind b'+ (bndrs,e') <- stripLambda e+ return (bndr:bndrs,e')+ stripLambda e = return ([],e)+ etaExpansionTL ctx e = do tcm <- Lens.view tcCache