問題タブ [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.
haskell - Foldable のモノイド
Haskell で Monoid のインスタンスを作成しようとしています。これは、同等の要素を含み、保存されている最大値を返す Foldable 構造に適用できるモノイドです。
これまでのところ、私はこれを持っています
リストでは完全に機能しますが、ツリーに問題があります。voidリストで使用すると返されます
それが私が望んでいることですが、要素のないツリーで使用すると
しかし、代わりに何も返さないようにしたい 子のないノードでは動作しませんが、値のあるノードでは動作します
なにか提案を?
PD: ghci 7.10 を使用しています
haskell - モノイドとしてのエンドファンクション
私はこれを試しています(学習目的で):
に等しいと期待id <> id
するid . id
ただし、次の(id <> id) 1
エラーが表示されます。
実行するには何を変更すればよいですか?
モノイドと Haskell 型クラスをよりよく理解するためのものであり、実用的な使用法ではありません。
haskell - モノイドがfoldr/foldlの要件ではないのはなぜですか?
私はFoldable
Haskellのクラスを見ています。メソッドのうちの 2 つは、Monoid インスタンスを必要としますfold
。foldMap
しかし、foldr
またはfoldl
そのような制約はありません。
foldr
/の結果foldl
が同等であるためには、指定された折り畳み関数を連想的に制限するべきではありませんか? 同じリストで、foldr/foldl の結果が異なる例はありますか?
Foldable インスタンスは Monoidal 値をラップすべきではありませんか? それともFoldableの方が一般的ですか?
haskell - セミグループ インスタンスの書き方
問題
データ型を指定して、Semigroup インスタンスを実装します。実装するために与えられたデータ型は次のとおり
data Or a b = Fst a | Snd b deriving (Eq, Show, Num)
です。そして、次のように機能する必要があります。
値をテストする> Fst "help" <> Fst "me"
と正しく動作しますが、他の値をテストするとエラーが発生します。エラーからクラスを派生させてこれらのエラーを修正しようとすると、さらにエラーが発生します。ここで何が間違っていますか?
マイコード
エラー
整数でテストしようとすると、次の> Fst 1 <> Fst 2
ようになります。
Num クラスを派生させようとすると、次のdata Or a b = Fst a | Snd b deriving (Eq, Show, Num)
ようになります。
haskell - 実際の使用において隣接とはどういう意味ですか?
いくつかの概念を理解しようとすると、「隣接」という用語に出くわすことがよくあります。私は分野論や圏論の専門家ではないので、これらのことは抽象的すぎて理解できません。
私が見つけた最も単純なケースはMonoid Maybe a
、Nothing
.
ウィキペディアから、要素を半群に「隣接」させることで、別のMonoid
インスタンスを取得できることがわかります。私は文を理解していませんが、与えられた方程式は、それがまさに私が必要としているものであることを示唆しています(何らかの理由でデフォルトではありません):
任意の半群 S は、S にない要素 e を隣接させ、すべての s ∈ S に対して e • s = s = s • e を定義するだけでモノイドに変換できます。
- 少なくともこの場合、「隣接」は「追加」と同じ意味ですか?
- この概念の他の簡単な例はありますか?
- 「左随伴」であるものの最も単純な例は何でしょうか?
haskell - Haskell の欠損値を無視して Maybe (Monoid) の Foldable を折り畳む
値が欠落しているデータを扱っています。これは、Maybe 値のリストとして単純に表されます。欠損値を単純に無視するさまざまな集計/統計操作を実行したいと思います。
これは、次の質問に関連しています。
Haskell で Maybe Int のリストを合計する慣用的な方法
多分モノイドを使用して値をカスタム操作と簡単に組み合わせる方法は?
ただし、前者の質問はNothing
、値が欠落している場合に返すことに満足しており、これは私の場合のオプションではありません。Num
のインスタンスを作成するソリューションがありますMaybe
。ただし、これは足し算と掛け算に固有のものであり、他にもいくつかの問題があることを意味します。
それに基づいて、次のようなことができます。
これについて私が気に入っているのは、 lenientsum'
と strictの 2 つの関数sum''
があり、必要に応じて選択できることです。同じ関数を使用して任意のNum
インスタンスを合計できるため、リストMaybe
を変換せずに同じコードをリストに再利用できます。
これについて私が気に入らない点: インスタンスが重複しています。また、加算と乗算以外の演算については、新しい型クラスを指定して新しいインスタンスを作成する必要があります。
したがって、おそらく2番目の質問で提案された行に沿って、適切で一般的な解決策を得ることが何とか可能かどうか疑問に思っていましたNothing
.これはmempty
、問題の操作の .
これを行う良い慣用的な方法はありますか?
編集:これまでのところ最良の解決策は次のとおりです。