次のようなプログラムがあるとしましょう:
list = [1..10000000]
main = print $ sum list
これをコンパイルして、実行可能ファイルが 50000005000000 を出力するだけで、それほど時間と労力をかけないようにしたいと考えています。
基本的に、確実に計算される式 (ここでは厳密性分析が役立つかもしれません) は、コンパイル時に事前に計算できます(つまり、参照透過性を使用して、値を計算するときに実際には問題にならないことを示します)。
要するに:「計算する必要があります」+参照透過性=事前に計算できます
これは、入力に依存する何かに到達するまでプログラムを実行するようなものです (つまり、すべての入力に共通するプログラムのコアは事前に計算されます)。
現在これを達成するための既存のメカニズムはありますか (Haskell または他の言語で)? [そもそも参照透過性がないため、C++ のテンプレートのようなものを指さないでください。]
そうでない場合、この問題はどれほど難しいですか? [付随する技術的 (および理論的) 問題は何ですか?]