問題タブ [fixpoint-combinators]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell 式修正関数
それで、私は Paul Hudak の本「The Haskell School of Expression」を読んでいて、そこでの演習に行き詰まっています。
ここに行きます
関数 fix が次のように定義されているとします。
の主なタイプはfix
何ですか? それは私が知っている、それですb -> b -> b
しかし、私は方法fix
が定義されていることを理解していません。それは無限再帰に入りませんか?
また、関数を次のremainder
ように定義します。
非再帰的であるようにremainder
using を書き換えます。fix
haskell - Free と Cofree の不動点関手
明確にするために、フリーモナドが functor に適用された fixpoint コンビネータにどのように似ているかについて話しているのではありません。(これは面白くないというわけではありません!)Free f
f
私が話しているのは の不動点Free, Cofree :: (*->*) -> (*->*)
、つまりそれ自体に同形f
な関手です。Free f
f
背景: 今日、自由モナドについての理解不足を補うために、 forFree
とfor のCofree
両方で、さまざまな単純な関手についてそれらのいくつかを書き出すことにしました。 . 私が特に興味をそそられたのは、 と同型 (つまり、任意の型を無人にマップする関手) であるという発見Cofree Empty
でしEmpty
たConst Void
。OK、これはばかげているかもしれません。空のゴミを入れると、空のゴミが出てくることを発見しました。– でもねえ、これは圏論であり、宇宙全体が一見些細なことから立ち上がる... ですよね?
当面の問題は、そのCofree
ような不動点がある場合、どうなるかということFree
です。まあ、それEmpty
はモナドではないので、確かにあり得ません。Const ()
手っ取り早い容疑者は、またはのような近くのものですが、そうIdentity
ではありません:
実際、Free
常に余分なコンストラクターを追加するという事実は、不動点であるファンクターの構造がすでに無限でなければならないことを示唆しています。Cofree
しかし、そのような単純な固定点がある場合、( Reid Barton がコメントで取り上げたFree
fix-by-construction のように) はるかに複雑な固定点しか持たないのは奇妙に思えます。FixFree a = C (Free FixFree a)
退屈な真実は「偶然の不動点」Free
がなくCofree
、あるのは単なる偶然なのか、それとも何かが欠けているのでしょうか?
haskell - 既に Functor であるデータ型で `Fix` を使用する再帰スキーム?
テキスト エディタRasaの作業を続けています。
現時点では、ビューポート/分割を追跡するためのシステムを構築しています (vim 分割に似ています)。この構造をツリーとして表現するのは、私には自然に思えました。
これはうまく機能し、s をツリーに保存View
し、それらをトラバース/fmap して変更することができます。これは、レンズ パッケージとも非常によく適合します!
私は最近再帰スキームについて学んでいますが、ツリーは再帰的なデータ構造であるため、これはそれらに適したユースケースのようです。
Fixpoint バージョンを構築するのに十分なほどよく理解できました。
r
ただし、現在、Functor インスタンスは;によって使い果たされています。
私はいくつかのバリエーションを試しました
しかし、 window は型シノニムであるため、チョークします。
と:
そしてそれも失敗します。
- fmap/traverse over を定義することはまだ可能
a
ですか? それとも、再帰スキームのプリミティブを使用してこれらの操作を行う必要がありますか? Bifanctor を実装しますか? インスタンスの実装はどのようになりますか?
残りの型はここにあります。ウィンドウ用の適切な Functor インスタンスがないため、プロジェクトはコンパイルされません...
ありがとう!!