packages feed

clash-lib 0.6.11 → 0.6.12

raw patch · 3 files changed

+24/−1 lines, 3 files

Files

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