on master help sign in
Strictly evaluate data constructor args
commited0ba834db9ab32ecc3f418635e1a40ccb04c13c authorDavid Christiansen <david@davidchristiansen.dk> dateSat 25 May 2013, 21:13 (13 years ago) parentf593dcc
1 file changed+5
src/Core/Execute.hs+5
src/Core/Execute.hs+5
@@ -274,6 +274,11 @@ execApp' env ctxt f@(EP _ (UN "mkForeign") _) args@(ty:fn:xs) | Just (FFun f arg
274274 Just r -> return (mkEApp r (drop (length argTs) xs))
275275 | otherwise = return (mkEApp f args)
276276
277+execApp' env ctxt c@(EP (DCon _ arity) n _) args =
278+ do args' <- mapM tryForce (take arity args)
279+ let restArgs = drop arity args
280+ execApp' env ctxt (mkEApp c args') restArgs
281+
277282execApp' env ctxt f@(EP _ n _) args =
278283 do let val = lookupDef n ctxt
279284 case val of