2016-09-18 16 views
4
STM (State# RealWorld -> (#State# RealWorld, a#)) 

#は、Haskell演算子のリストには表示されません。また、Googleでは有用なものもありません。 Ghci:>:t (#) states:スコープ内に変数がありません。「#」の意味は?

そのキャラクターは何をしていますか?そして、なぜそれが上記のコード(STMから)で使われていますか?

答えて

5

それを使用するには言語拡張が必要です。それは特別な方法です。

それは何もしません、それはGHCの人々が低レベルの多分ボクシング関連のものの名前で使用するのが好きと見ているだけ特別な文字です。

あなたがそこに見ているものですabのアンボクシングタプルの種類、ある(# a, b #)あります - それはそれは(# State#, ...だ、(#State# , ...ではないのですが。

+0

「State#」と「#State#」の言及がありますが、どちらも同じであるか違いがありますか? – BitTickler

+0

ああ!だから、それに関係する ''# ''もありません。これは、haskellパーサーが私のように構文解析する上でよりインテリジェントであるという証拠かもしれません:) – BitTickler

+3

実際には、このコードのために2つの言語拡張が必要です:UnboxedTuplesの 'UnboxedTuples'と' State# ' 。 – dfeuer