Haskell は機能的で純粋であるため、基本的に、コンパイラが暗黙的な並列処理に取り組むために必要なすべてのプロパティを備えています。
次の簡単な例を考えてみましょう:
f = do
a <- Just 1
b <- Just $ Just 2
-- ^ The above line does not utilize an `a` variable, so it can be safely
-- executed in parallel with the preceding line
c <- b
-- ^ The above line references a `b` variable, so it can only be executed
-- sequentially after it
return (a, c)
-- On the exit from a monad scope we wait for all computations to finish and
-- gather the results
概略的に、実行計画は次のように記述できます。
do
|
+---------+---------+
| |
a <- Just 1 b <- Just $ Just 2
| |
| c <- b
| |
+---------+---------+
|
return (a, c)
フラグやプラグマを使用してコンパイラにそのような機能がまだ実装されていないのはなぜですか? 実際的な理由は何ですか?