問題タブ [monoids]
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.
debugging - Haskell での無限合計のデバッグ
私が関数を持っているとしましょう (それには実用的なアプリケーションはなく、学術的な興味があるだけです。したがって、モノイド、アプリケーション ファンクター、フィックスポイント コンビネーターを使用して、奇妙な書き方をします)
型チェックを行いますが、テストする前に期待どおりの動作をするかどうか確信が持てません。
それをテストおよび/またはデバッグするにはどうすればよいですか? で可能なように、数回繰り返した後に結果を見るようなものですtake 10 [1..]
。
やのghci
ような単純なデバッグ機能については少し知っていますが、非終了計算にステップインするため、何も調べることができません (問題になることさえあります)。また、この関数でfrom moduleを使用する方法もわかりません。:break
:step
^C
trace
Debug
任意のポインタをいただければ幸いです。
haskell - 平衡二分木のインデックス関数
indexJ
問題があります。バランスの取れたバイナリ ツリーを各ステップでウォークスルーするときに、関数がどのサブツリーを選択する必要があるかをどのように決定する必要があるかわかりませんJoinList
。
アイデアは、各サブツリーのサイズ (データ要素の数) をキャッシュすることです。これを各ステップで使用して、目的のインデックスが左または右のブランチにあるかどうかを判断できます。
私はこのコードを持っています:
私は関数を書きます:
関数tag
と(+++)
うまく機能していますがindexJ
、JoinListツリーからi番目の要素を返す必要がある関数を終了する必要があります.i = [0..n]
私の機能indexJ
が間違っている =) 空のツリーがある場合 - (サイズ 0) シングル (サイズ 1) の「データ」がある場合 - (サイズ 1) ですが、Append (サイズ 2) (Single (Size 1) ) 'k') (シングル (サイズ 1) 'l') どのブランチを選択する必要がありますか? i-1 = 1 と i には、それぞれに 1 つのデータ要素を持つ 2 つのブランチがあります。
更新:誰かが JoinList のツリーのテイクアンドドロップ機能を必要とする場合、私はそれを作ります:
haskell - この型をモノイドインスタンスにする方法/可能性
私はデータ型を持っています:
そして、これを次の実装でモノイドにしたい:
を介して任意にネストされたタプルを取得できることに注意してくださいmconcat
。
しかし、tmappend は現在、 の型シグネチャに違反していmappend
ます。これは本当にモノイドですか?より良い型表現を持つものにすることはできますか?
haskell - Haskell - newtype ラッパーのラップとアンラップ - もっと簡単な方法はありますか?
pad
リストを受け取り、特定のサイズになるまでパディングする関数を書いています。私は2つの実装を試しました:
と
最初のものは の論理的な使用法のようですが、整数のリスト (または複数の方法でMonoid
あるもの) で呼び出すのは面倒です:Monoid
余分なタイピングはあまり気にしませんが、意味がうまく伝わらないようです。この機能をどのように実装しますか?
haskell - モノイド vs モナドプラス
私は両方に非常に慣れていないMonads
とMonoids
について最近知りましたMonadPlus
。私が見たところ、Monoid
どちらMonadPlus
も連想二項演算とアイデンティティを備えた型を提供しています。(私はこれを数学用語で半群と呼びます。) では、 と の違いは何Monoid
ですかMonadPlus
?
haskell - (Monad m, Monoid o) => mo? の適用インスタンス
ひどいタイトルでごめんなさい。である型をラップするApplicative
ためのインスタンスを作成しようとしています。Monad
Monoid
これは機能しません。GCHi は次のように訴えます。
上に書いたことは意味をなさないかもしれないことを理解しています。コンテキストは次のとおりです。論文A pattern for most compositional functions でcompos
説明されているように、抽象化を使用しようとしています。このツリーを取得します ( の GADT バージョンを使用して、大幅に簡略化しました):compos
ツリーをたどり、エラーのリストまたは文字列のセットを返す関数をたくさん書きますが、下に行くときに状態 (バインド環境など) も必要とします。たとえば、次のようになります。
composFoldM
構造を利用するcompos
ことで、これらはすべて抽象化できるはずだと思います(Monad m, Monoid o) => m o
。そのため、論文の 575/576 ページにある の GADTApplicative
バージョンで使用します。この構造のインスタンスを作成する必要があると思います。どうすればいいですか?それとも、完全に間違った道を進んでいますか?compos
Applicative