シェイプレスHList
からpoint
とbind
の実装では、Monad
(scalaz)を定義しようとしました。最初の問題は、HList
の特性は型コンストラクタではありませんが、タイプlambdasで解くことができます。point
はシンプルですが、bind
の正しい実装が見つかりませんでした。何らかの型の関数が必要ですねAux/Mapper
トリック、形のない側はまだ私には暗いです。 HList
は、単純なリストのようにMonadとなるすべての機能を持っているので、Scalazから実装することは可能ですか?シェイプレスなhlistのscalazモナドのインスタンスを定義する
5
A
答えて
0
モノイドは、特定の法律に従ういくつかの操作を含むセットです。可能な限りどの要素を検討していますかHListM[A]
?あなたがHListM[A] = HList
、すなわち任意のHList
を宣言した場合は、identity
として、すべてのmap
Sを処理することにより除き、f: A => B
と、あなたがすることができませんmap
すばやく見つけると、あなたはいくつかの余分が、不活性住民とかなりつまらないモナドId
を(再発明しました)。
私たちも、実際にはScalaでその型を表現することは難題ですが、タイプHListM[A] = A :: ... :: A :: HNil
(とモナドを作ることができる - 実際にあなたは}補助トレイトtrait CopiesOf[N <: Nat, A] {type Out <: HList
を必要とするだろう。こののインスタンスを提供するために、implicit
Sを、とまで続い実存それを書いてください(CopiesOf[N, A]#Out forSome {type N <: Nat}
))。これに対してモナド演算を書くことは可能ですが、操作の時点でPrepend
のような形状のない補助クラスを必要とする必要がありますが、スカラで "forall"型を表現する実際の方法はないので - _0
およびSucc[N]
がありますが、N <: Nat
のインスタンスがあることをコンパイラーに証明する方法はありません。使用する必要があるときは、暗黙のものを要求するだけです。
しかし、多くの作業の後に、List[A]
と同形のものになります。その場合はList[A]
を使用しないのはなぜですか?
関連する問題
- 1. シェイプレスHListパラメータのオーバーライド
- 2. シェイプレスなHListの型をマップする
- 3. シェイプレス:foldLeft on hlistコンパイルエラー
- 4. シェイプレスHListをタプルに変換する
- 5. Scalaz州のモナドの例
- 6. シェイプレスHLISTを使用した汎用ストリームビルダー
- 7. シェイプレスHListに複数の要素を追加
- 8. HListのこの定義の理解
- 9. Scalaz:それは私はモナド変圧器を勉強なし
- 10. newtypeをモナドのインスタンスにする方法
- 11. Scalaz - リストと州のモナドを組み合わせて理解する
- 12. タイプがHListのメンバーである場合、どのようにシェイプレスでチェックインするのですか?
- 13. モナドのインスタンスとしての機能
- 14. Scalaz 7.1.5のFreeはなぜMonadインスタンスではないのですか?
- 15. 異なる種類のhetergenous HListに1種類の均質なHList地図
- 16. 一見単純なFoldableインスタンスの定義
- 17. コンテキストとインスタンスの正式な定義
- 18. 同じケースクラスの2つのインスタンスをマージするためにシェイプレスを使用
- 19. HListのメンバのための自動HEqインスタンス
- 20. Zip generic HList with static Nat HList
- 21. IOモナド内のモナドを使用する
- 22. この@@演算子はscalazで定義されていますか?
- 23. がscalazでscalazエンド機能
- 24. Slick HLISTから要素を取得する(またはSlick HLIstをシェープレスHListに変換する)
- 25. モナド関数の定義?力のV及びDが与えられると
- 26. HListをシーケンス化する
- 27. クラス(インスタンスではない)のrepr()を定義しています
- 28. タイプ定義:モジュールのインスタンスを作成
- 29. ケースクラスをHListに変換する方法は、シェイプレスで再度ケースクラスを作成するよりも変更するのですか?
- 30. HListを指定すると、HMapを取得する方法
これは簡単な意味では不可能ですが、興味深い質問です。例えば[私の答えはこちら](http://stackoverflow.com/a/14456938/334519)(モナドの代わりに応用ファンクタを含む)、[この関連例](https://github.com/milessabin/shapeless/) Shapelessと私の(答えられていない)質問[ここ](https://twitter.com/travisbrown/status/294064540235210752)の中では、 –
ScalaZはまだ私にとって未知の領域ですが、これには必要なメソッドと相互運用性が含まれている可能性があります:[Shapeless Contrib](https://github.com/typelevel/shapeless-contrib) – EECOLOR
mandubian(http://stackoverflow.com/ users/601296/mandubian)は、HList用のmonoidについてのブログ記事を書いています:http://mandubian.com/2014/07/29/hmonoid/、興味深いものです。 – al3xar