私は固定小数点型のコンビネータを理解していますが、高次の固定n型のコンビネータは分かりますが、HFix
はわかりません。 HFix
を適用できる一連のデータ型とその(手作業で派生した)固定小数点の例を挙げてください。Haskellのmultirecパッケージで `HFix`はどのように動作しますか?
5
A
答えて
5
ここで、multirec packageについて説明します。
HFix
は、相互に再帰的なデータ型用の固定小数点型の組み合わせです。 これはよく紙に3.2節で説明したが、アイデアは、このパターン一般化する です:彼らは、それが固定点を超えるんどのように多くの種類を制限するには
Fixn :: ((∗ ->)^n * ->)^n ∗
≈
Fixn :: (*^n -> *)^n -> *
に
Fix :: (∗ -> ∗) -> ∗
Fix2 :: (∗ -> ∗ -> ∗) -> (∗ -> ∗ -> ∗) -> ∗
を*^nのかわりに を使用してください。それらは、 以上の相互に再帰的なASTデータ型の例を示しています。私はおそらく最も単純な例を提供します。
data Even = Zero | ESucc Odd deriving (Show,Eq)
data Odd = OSucc Even deriving (Show,Eq)
たちは偶数を持ち歩いていることを意味します
data EO :: * -> * where
E :: EO Even
O :: EO Odd
EO Even
セクション4.1
EO Even
と
EO Odd
をそれぞれ書くときに、具体的なコンストラクタ を参照するElインスタンスが必要です。
instance El EO Even where proof = E
instance El EO Odd where proof = O
これらはIためHFunctor
instance の制約として使用されています。
ここで、偶数データ型と奇数データ型のパターンファンクタを定義します。 ライブラリからコンビネータを使用します。:>:
型コンストラクタタグ その型のインデックスを持つ値:
type PFEO = U :>: Even -- ≈ Zero ::() -> EO Even
:+: I Odd :>: Even -- ≈ ESucc :: EO Odd -> EO Even
:+: I Even :>: Odd -- ≈ OSucc :: EO Even -> EO Odd
は今、私たちは、このパターンファンクタの周りに結び目を作るためにHFix
を使用することができますが:
type Even' = HFix PFEO Even
type Odd' = HFix PFEO Odd
これらは今でもとEO EOと同型です奇数、私たちはそれFam
のインスタンス作れば、私たちは hfrom
and hto
functions を使用することができます。
type instance PF EO = PFEO
instance Fam EO where
from E Zero = L (Tag U)
from E (ESucc o) = R (L (Tag (I (I0 o))))
from O (OSucc e) = R (R (Tag (I (I0 e))))
to E (L (Tag U)) = Zero
to E (R (L (Tag (I (I0 o))))) = ESucc o
to O (R (R (Tag (I (I0 e))))) = OSucc e
シンプルで小さなテスト:
test :: Even'
test = hfrom E (ESucc (OSucc Zero))
test' :: Even
test' = hto E test
*HFix> test'
ESucc (OSucc Zero)
代数が自分Int
値にEven
とOdd
Sを回すと別の愚かなテスト:
newtype Const a b = Const { unConst :: a }
valueAlg :: Algebra EO (Const Int)
valueAlg _ = tag (\U -> Const 0)
& tag (\(I (Const x)) -> Const (succ x))
& tag (\(I (Const x)) -> Const (succ x))
value :: Even -> Int
value = unConst . fold valueAlg E
関連する問題
- 1. getLineはどのようにhaskellで動作しますか?
- 2. countUp Javascriptパッケージはどのように動作しますか?
- 3. GHCi 8.0.1用のHaskellポータブルインストールオプションはどのように動作しますか?
- 4. Meteorはどのように動作しますか?クライアントとサーバーはどのように動作しますか?
- 5. multiplyListはどのように動作させるのですか? Haskell ref:https://en.wikibooks.org/wiki/Haskell/Lists_II
- 6. Haskellの他のスレッドやTChanに関してHOpenGLはどのように動作しますか?
- 7. パッケージとはどのように動作する必要がありますか?
- 8. どのようにHaskellで
- 9. Haskellでは `>>>`と `>> =`はどのように動作しますか?
- 10. Makefileでは、VPATHはどのように動作しますか?
- 11. Adobe AIRパッケージャはどのように動作しますか?
- 12. タイプ・ダダクションはどのようにハスケルで動作しますか?
- 13. 「コール」はどのようにjavascriptで動作しますか?
- 14. NutchはHadoopクラスタでどのように動作しますか?
- 15. JBehaveはJavaでどのように動作しますか?
- 16. jQuery Mobileはjsfiddle.netでどのように動作しますか?
- 17. Meteorアプリケーションはどのようにオフラインで動作しますか?
- 18. メソッドはどのようにPythonで動作しますか?
- 19. cin.peek()はC++でどのように動作しますか?
- 20. タプルでtypedefはどのように動作しますか?
- 21. どのようにループはSchemeで動作しますか?
- 22. NPMはどのようにウィンドウで動作しますか?
- 23. WP7でDataContractJsonSerializerはどのように動作しますか?
- 24. ImmutableJSはAngular 2でどのように動作しますか?
- 25. アセンブラで 'label'はどのように動作しますか?
- 26. pcntl_forkはどのようにPHPで動作しますか?
- 27. インライン化はどのようにLLVMで動作しますか?
- 28. BugzillaはローカルPCでどのように動作しますか?
- 29. インデックススコープはどのようにMysqlで動作しますか?
- 30. pygameでsuper()._ init_はどのように動作しますか?
が、これが役立っている読んで、ありがとう、私はまだですちょっと混乱しました。 ':>:'についてもっと詳しく説明してもらえますか?それでも私にとってはまだ不透明です。 –
はい、それはかなり関わるライブラリです。私はそれについて少しのコメントを追加しました、今はもう時間がありません。乾杯! – danr
少し時間がかかりましたが、これを読んで、APIドキュメントと論文を読んで、それが最終的に意味をなさないようになりました。ありがとう、たくさん助けてくれました。 –