Hey Matt, cool idea! Also it looks like such a tool could 'solve' stream fusion: https://ghc.haskell.org/trac/ghc/ticket/915#comment:52
Greetings Sebastian 2018-02-27 18:01 GMT+01:00 Joachim Breitner <m...@joachim-breitner.de>: > Hi, > > something like this would be great. I don’t have a sense yet of what > “something” should be like. > > > Am Dienstag, den 27.02.2018, 09:59 +0000 schrieb Matthew Pickering: > > To go back to the power example, the recursive > > condition would have to be an inductively defined natural (data N = Z > > | S N) rather than an Int as the comparison operator for integers > > can't be evaluated by the optimiser. > > Sure they can: > > $ cat ConstantFolding.hs > {-# LANGUAGE TemplateHaskell #-} > {-# OPTIONS_GHC -fplugin=Test.Inspection.Plugin #-} > module ConstantFolding where > > import Test.Inspection > > ltInt :: Bool > ltInt = (3::Int) > 2 > > ltInteger :: Bool > ltInteger = (3::Integer) > 2 > > true :: Bool > true = True > > > inspect $ 'ltInt === 'true > inspect $ 'ltInteger === 'true > > $ ghc -O ConstantFolding.hs > [1 of 1] Compiling ConstantFolding ( ConstantFolding.hs, > ConstantFolding.o ) > ConstantFolding.hs:17:1: ltInt === true passed. > ConstantFolding.hs:18:1: ltInteger === true passed. > inspection testing successful > expected successes: 2 > > > > As an alternative with a maybe simpler user interface (and probably > less power), I wonder if we can create a magic function > > compileTimeWHNF :: a -> a > or > > compileTimeNF :: a -> a > and a GHC core plugin (or eventually built-in thing) that finds these > magic functions and evaluates their arguments, using the simplifier. > > > Cheers, > Joachim > > -- > Joachim Breitner > m...@joachim-breitner.de > http://www.joachim-breitner.de/ > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > >
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs