2

私は、ほとんどのモナドがトラバースするscalaz能力を持っていることを見て、それを見て、それがすべてのトラバース可能なオブジェクトもシーケンスを持つことができることを意味するかどうか疑問に思っていまし. ListOptionIdentity

それが実際に当てはまる場合(私は実際に間違っている可能性があります)、Identityたとえば次の出力は何ですか:

Identity(Option(1))これはどうなりOption(Identity(1))ますか?または、何か不足していますか?その場合、ポインタが非常に役立ちます。

編集

実際、アイデンティティ シーケンスが次のようになっていることについて、私は正しかったです。

Identity(Option(1))さすがになりOption(Identity(1))ます。それで、質問のその部分は解決されました。

だから私の質問は元のタイトルに洗練されています-すべてのトラバース可能なモナドはシーケンシャルですか?

4

1 に答える 1

3

sequenceこれは恒等関数を使ったトラバーサルとして非常に簡単に定義できます。つまり、Haskell では次のようになります。

sequence = traverse id

または、Scalaz 6 (上記の 2 番目のリンクから) では、かなり冗長です。

def sequence[N[_], B](implicit
  a: A <:< N[B],
  t: Traverse[M],
  n: Applicative[N]
): N[M[B]] = traverse((z: A) => (z: N[B]))

そうです、トラバース可能なインスタンスを持つ任意の型をシーケンスできます (モナドである必要さえありません)。

于 2013-11-18T22:36:12.293 に答える