問題タブ [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.

0 投票する
2 に答える
245 参照

haskell - Haskell 式修正関数

それで、私は Paul Hudak の本「The Haskell School of Expression」を読んでいて、そこでの演習に行き詰まっています。

ここに行きます

関数 fix が次のように定義されているとします。

の主なタイプはfix何ですか? それは私が知っている、それですb -> b -> b

しかし、私は方法fixが定義されていることを理解していません。それは無限再帰に入りませんか?

また、関数を次のremainderように定義します。

非再帰的であるようにremainderusing を書き換えます。fix

0 投票する
2 に答える
615 参照

haskell - Free と Cofree の不動点関手

明確にするために、フリーモナドが functor に適用された fixpoint コンビネータにどのように似ているかについて話しているのではありませ。(これは面白くないというわけではありません!)Free ff

私が話しているのは の不動点Free, Cofree :: (*->*) -> (*->*)、つまりそれ自体に同形fな関手です。Free ff

背景: 今日、自由モナドについての理解不足を補うために、 forFreefor のCofree両方で、さまざまな単純な関手についてそれらのいくつかを書き出すことにしました。 . 私が特に興味をそそられたのは、 と同型 (つまり、任意の型を無人にマップする関手) であるという発見Cofree EmptyでしEmptyConst Void。OK、これはばかげているかもしれません。空のゴミを入れると、空のゴミが出てくることを発見しました。– でもねえ、これは圏論であり、宇宙全体が一見些細なことから立ち上がる... ですよね?

当面の問題は、そのCofreeような不動点がある場合、どうなるかということFreeです。まあ、それEmptyはモナドではないので、確かにあり得ません。Const ()手っ取り早い容疑者は、またはのような近くのものですが、そうIdentityではありません:

実際、Free常に余分なコンストラクターを追加するという事実は、不動点であるファンクターの構造がすでに無限でなければならないことを示唆しています。Cofreeしかし、そのような単純な固定点がある場合、( Reid Barton がコメントで取り上げたFreefix-by-construction のように) はるかに複雑な固定点しか持たないのは奇妙に思えます。FixFree a = C (Free FixFree a)

退屈な真実は「偶然の不動点」FreeなくCofree、あるのは単なる偶然なのか、それとも何かが欠けているのでしょうか?

0 投票する
2 に答える
540 参照

haskell - 既に Functor であるデータ型で `Fix` を使用する再帰スキーム?

テキスト エディタRasaの作業を続けています。

現時点では、ビューポート/分割を追跡するためのシステムを構築しています (vim 分割に似ています)。この構造をツリーとして表現するのは、私には自然に思えました。

これはうまく機能し、s をツリーに保存Viewし、それらをトラバース/fmap して変更することができます。これは、レンズ パッケージとも非常によく適合します!

私は最近再帰スキームについて学んでいますが、ツリーは再帰的なデータ構造であるため、これはそれらに適したユースケースのようです。

Fixpoint バージョンを構築するのに十分なほどよく理解できました。

rただし、現在、Functor インスタンスは;によって使い果たされています。

私はいくつかのバリエーションを試しました

しかし、 window は型シノニムであるため、チョークします。

と:

そしてそれも失敗します。

  1. fmap/traverse over を定義することはまだ可能aですか? それとも、再帰スキームのプリミティブを使用してこれらの操作を行う必要がありますか? Bifanctor を実装しますか? インスタンスの実装はどのようになりますか?

残りの型はここにあります。ウィンドウ用の適切な Functor インスタンスがないため、プロジェクトはコンパイルされません...

ありがとう!!