2011-07-26 5 views

答えて

15

これらはまったく関係ありません。

seqはタイプがあります。

seq :: a -> b -> b 

それがために怠惰な値aを強制するというのファンシーな方法です通常のフォームを、頭にaを評価する(seq a b、またはa `seq` bとして)使用されています少し評価しました。モナドとは何の関係もありません。

>>=は、モナドを配列決定するためのものである。

(>>=) :: Monad m => m a -> (a -> m b) -> m b 

これは、モナド値から値を取得し、別のモナド値を返す関数に渡すために使用されます。基本的には次のようになります。

getLine >>= putStrLn 

コマンドラインから入力文字列を取得して出力します。

だから、基本的に全く関係がありません。

+2

Hmmm、 'seq'は、ある種の「厳密な同一性のモナド」のために'(>>) 'のように数えられるかもしれません。質問者が心に持っていたことは間違いありません。 –

+2

あるいは、OPは 'sequence :: Monad m => [m a] - > m [a]'を考えていますか? –

+0

@pelotom、ナー、助けてくれてありがとう。 – mcandre

2

seqは、モナドに特異的ではない。 seqは、第2引数が返される前に第1引数の評価を強制するために使用されます。

+3

Nope。それはpseqでした。 Seqはその引数の両方にstrictlyです。評価の順番については何も言いません。 – fuz

関連する問題