A Tour of Go in Haskell

GitHub Language
Range and Close

Go の rangeclose に直接相当するものは Haskell にはありませんが、必要であれば簡単に用意することができます。

Go の for 式とともに使う range 句は、 チャネルの要素を(ちょうど配列のように)反復処理したいときに役立ちます。 Haskell の getChanContents :: Chan a -> IO [a] はチャネルをリストに変換するので同じようなことができます。

Go の組み込み関数 close はチャネルにこれ以上値が送られないことをマークします。 close を Haskell で簡単に再現するには Maybe を使い、 最後の値として Nothing を送るようにすればよいでしょう。 ただしこれはごく簡単な方法なので、すでに Nothing を送ったチャネルに更に値が送られたときエラーを起こすことはできません。 そこは少し注意が必要です。

余談ですが、Haskell では右のサンプルコードのようなことがやりたいときにはリストを使う方が素直な書き方になるでしょう。 リスト版も載せておきます。

< 4 / 11 >