すべてのトラバー可能なモナドには、付随するシーケンスがありますか

StackOverflow https://stackoverflow.com/questions/19854497

  •  29-07-2022
  •  | 
  •  

質問

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

それが実際にそうである場合(私は本当に間違っている可能性があります)、そして Identity 例えば:

Identity(Option(1)) これはなりますか Option(Identity(1))?それとも、何かが不足している場合は、ポインターが非常に役立つ場合があります。

編集

確かに、私はアイデンティティシーケンスが次のものであることについて正しかった:

Identity(Option(1)) 確かになります Option(Identity(1)). 。そのため、質問の一部が解決されます。

それで、私の質問は元のタイトルに洗練されています - すべての横断可能なMonadシーケンスがありますか?

役に立ちましたか?

解決

sequence アイデンティティ関数とのトラバーサルとして非常に単純に定義することができます。

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]))

したがって、はい、トラバー可能なインスタンスを持つ任意のタイプをシーケンスすることができます(そして、モナドである必要さえありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top