問題タブ [arrows]
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 - アローループはどのように機能しますか? また、mfix?
残りのアロー機構にはかなり慣れましたが、ループがどのように機能するかわかりません。それは私には魔法のように思えますが、それは私の理解にとって悪いことです. mfixも理解できません。orブロックで使用rec
するコードを見ると、混乱します。通常のモナド コードまたはアロー コードを使用すると、計算をステップ実行して、頭の中で何が起こっているかの操作上の図を保持できます。になったら、どの写真を残せばいいのかわからない!私は立ち往生し、そのようなコードについて推論することはできません.proc
do
rec
私が理解しようとしている例は、矢印に関するロス・パターソンの論文、回路に関するものです。
この例を理解すれば、ループ全般を理解できるようになり、mfix を理解する上で非常に役立つと思います。彼らは本質的に私には同じように感じますが、おそらく私が見逃している微妙な点がありますか? とにかく、私が本当に賞賛したいのは、そのようなコード片の操作図です。これにより、「通常の」コードのように頭の中でステップスルーできます。
編集:Pigworkerの回答のおかげで、recなどの要求が満たされることについて考え始めました。例を挙げるcounter
と、 rec ブロックの最初の行は という値を要求しますoutput
。output
これは、操作上、ボックスを作成し、ラベルを付け、 rec ブロックにそのボックスを埋めるように依頼することを想像しています。そのボックスを満たすために、returnA に値をフィードしますが、その値自体は と呼ばれる別の値を要求しますnext
。この値を使用するには、rec ブロックの別の行で要求する必要がありますが、今のところ、rec ブロックのどこで要求されているかは問題ではありません。
次の行に移動すると、 というラベルの付いたボックスが見つかり、next
別の計算でそれを満たすように要求します。さて、この計算には最初のボックスが必要です! ボックスを指定しますが、その中には値がありません。したがって、この計算で の内容が要求されるとoutput
、無限ループに陥ります。さいわい、delay はボックスを受け取りますが、ボックスの中を見ずに値を生成します。これで塗りつぶさnext
れ、塗りつぶしが可能になりますoutput
。これでoutput
、この回路の次の入力が処理されると、前のボックスはその値を持ち、次の 、したがってoutput
次の を生成するために要求される準備が整います。next
output
それはどのように聞こえますか?
haskell - カテゴリと矢印の「間」型クラスは意味がありますか?
多くの場合、Applicative
なしpure
のようなもの、またはのようなものがありますがMonad
、はありませんreturn
。semigroupoidパッケージは、これらのケースをとでカバーしApply
ますBind
。Arrow
今、私は、意味のある関数を定義できないという点で同様の状況にありarr
ますが、他の関数は完全に理にかなっていると思います。
関数とその逆関数を保持する型を定義しました。
今は実装できませんArrow
が、何か弱いものがあります。
&&&
と定義されておりf &&& g = arr (\b -> (b,b)) >>> f *** g
、元に戻せないため、同等の実装はできないと思います(\b -> (b,b))
。それでも、この弱い型クラスが役立つと思いますか?理論的な観点からも意味がありますか?
opengl - 矢印の内側でIOモナドを呼び出す
おそらく私はこれを間違った方法で行っていますが、HXTを使用して、HOpenGLの配列で使用したいいくつかの頂点データを読み込みます。頂点配列は、newArrayを呼び出して作成されたPtrである必要があります。残念ながら、newArrayはIO Ptrを返すため、Arrow内でそれを使用する方法がわかりません。IO a-> Arrow aに似た型宣言を持つものが必要だと思いますか?
haskell - パラメータを HXT 矢印に渡す方法と -<< の使用方法
私の質問は次のとおりです。解析するこのxmlファイルがあります:
次の出力が必要です。
しかし、以下のコードは私に与えます:
XML を 1 回だけ解析して、「ERRORS ラベル」と ERR を取得したいと考えています。
私の問題は機能にあると思いますerrToLab
が、明らかな解決策はありません。
ご協力いただきありがとうございます。
ここにコードがあります
haskell - アプリカティブ ファンクターとアローを混在させる方法
Andrew Birkett のブログApplicative arrows for XML &&& return to pureで、矢印と applicative functor を混在させることができると読みました。
私は自分でそれを試しましたが、私は期待したものを持っていません。私はこの結果が欲しい:
しかし、私は代わりにこれを取得します:
コードにねじれがあると思いますが、どこを検索すればよいかわかりません。
誰かが助けを提案できる場合、以下は私のコードです。
haskell - ネストされたレコードと listA 矢印の処理方法
私は次のような状況にあります。プローブから週のデータを取得します。データはいくつかの xml ファイルに収集されます (以下のコードではインライン)。これらを 1 つのファイルに連結する必要があります。ただし、それらを 1 つのレコードに集約し、さらに 1 つのファイルに変換できます。
キャッチしようとする結果レコードは次のとおりです。
ご覧のとおり、 perfMはすべてのデータを収集します。
しかし、次のコードは私にそれを与えます。
ここで何が起こっているのか、どこを見る必要があるのか 、これは私には本当に不明確です. getYearOri と addOri 関数にあると思いますが、これまでのところ、私の試みはすべて残念なことに失敗しました。
変更するコードについて誰かが私に手がかりを与えることができれば。
list - リストの長さを矢印で比較する
リストの長さを比較するに触発されました
リストのリストで最も長いリストを見つけたい場合、最も簡単な方法はおそらく次のとおりです。
より効率的な方法は、長さを事前に計算することです。
今、私はそれをさらに一歩進めたいと思っています。通常の場合は効率的ではないかもしれませんが、矢印を使用してこれを解決できますか? 私の考えは、基本的には、すべてのリストを同時にステップ実行し、最も長いリストを除くすべてのリストの長さを超えるまでステップを続けることです。
前述の (非常に不自然な) 例では、各リストを 2 ステップ実行するだけで、そのリスト[1..2^1000]
が最も長いかどうかを判断でき、リスト全体の長さを判断する必要はありません。これが矢印でできるというのは正しいですか?もしそうなら、どうやって?そうでない場合、その理由は何ですか? また、このアプローチをどのように実装できますか?
haskell - モナド、モノイド、ファンクター、矢印を実際に使用する
私は最近、モナドやモノイドなど、関数型プログラミングのさまざまな側面に役立つリソースについてこの投稿に出くわしました。
しかし、問題は、平均的なプログラマーがそのような概念からどのような用途を利用できるかということです。私はしばしばそれらの問題についての「学術的」研究に出くわします。しかし、実際に(実際のプロジェクトで)それらを使用している人に会ったことはありません。
だから問題は-Haskellで実際にそのようなものを利用する広く使われているオープンソースプロジェクトはありますか?そのようなプロジェクトは、「アカデミック」ソフトウェアではなく、「プロダクション」ソフトウェアでこの概念の実際の必要性を示しています。ただ楽しみのために」。次のようなリストを作成するのはクールです。
- モナド-AやBのようなプロジェクトで使用されます。そうしないと、そのようなコードははるかに複雑に見えるためです。
- モノイドについても同じです。
- ファンクターについても同じです。
- 矢印についても同じです。
haskell - アローとモナド、計算を構成するための2つの独立した視点?
Monad.Reader#13のBrent Yorgey による「The Typeclassopedia」を読んだところ、図 1 に示すように、「Functor 階層」が「Category 階層」と相互依存していることがわかりました。
著者によるとArrowApply == Monad
、特に前のものは、次の場合に使用できる単なる型クラスのインスタンスであるとのことです。
「中間結果から矢印を計算し、この計算された矢印を使用して計算を続行できるようにしたいと考えています。これが、ArrowApply によって与えられた力です。」
しかし、どうすればこれらのものをまとめることができるでしょうか? つまり、Monad と Arrow の両方にいくつかのフロー制御関数 ( if
and else
vs. ArrowChoice
、またはforM
vs.など) があり、Monad ( 、または)ArrowLoop
に「欠けている」ように見える機能もあります。これらはすべて、副作用の計算フローを構築するために Monad または Arrow システムのどちらを使用するかを選択する必要があるように思われ、別のシステムではいくつかの機能が失われます。(***)
(|||)
first
haskell - オートマトンのように使用できるモナドはありますか?
ある入力データ型から出力データ型へのストリームトランスフォーマーを作成しています。入力はユーザーが行うため、イベント間には時間がかかります。各入力にはある程度のリソースの読み込みが必要なため、「将来を見据えて」、つまり、すべての可能な入力をメインの計算に送信し、結果に基づいてリソースをプリロードしたいと思います。
現在、各入力の後に常に1つの出力がありますが、これを変更することは最終的に興味深いものになる可能性があります。
私はRossPatersonによるAutomatonトランスフォーマーでそれを実装することに成功しました。私のソリューションが最適かどうかはわかりません。
- これを行う方法の良い例はありますか?おそらくテストコードでも?
- モナドでも達成できますか?(例?、なぜそれが不可能なのか説明?)
編集:より詳細な情報を求めた後、ここにコードを追加しました。今、私はそれを削除し(それは理解できませんでした)、他の説明を追加します。私の質問は答えられます。
私の意図は、矢印/ストリームトランスフォーマーなどに入力された各ユーザー入力の後にメインイベントループを停止させることでした。次に、現在のオートマトンの状態を保存し、考えられるすべての入力(偽のイベント)を1つずつオートマトンに送信し、それらをキャッシュするためにロードする必要のあるリソースを確認します。次の実際のイベントの後、応答性を高めるためにキャッシュを使用します。主な計算はこれに影響されるべきではありません。