問題タブ [ghc-generics]

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 投票する
1 に答える
82 参照

haskell - GHC.Generics の「packageName」

タイプのグローバルに一意の識別子を提供するクラスがあります。

これはほとんど機能します:

しかし、次のデータ型のパッケージを取得できませんGHC.Generics:

できますか?パッケージがなければ、GUI は実際には「グローバルに」ユニークではありません。

ところで、私Data.Typeableは書くことができることを知っています:

それは私ができることです。しかし、私は興味がありGHC.Genericsます。

0 投票する
1 に答える
688 参照

haskell - 「from」の使用から生じる (Generic (fa)) のインスタンスなし

次のコードに適した型制約を見つけるのに問題があります

で失敗します

gnameこのように制約を追加する

で失敗します

編集:完全なスニペットの完全なエラー メッセージ

これは GHC 7.6.3 の場合です。

0 投票する
1 に答える
50 参照

haskell - GHC.Generics 使用時に Show 制約を追加する

GHCジェネリックを使用しています。私の使用例は、遺伝子配列をエンコードおよびデコードしていることを除いて、wiki の例とほとんど同じです。

エラーが発生した場合にユーザーに報告できるように、既に読んだもののリストを保持することにするまで、これはすべて正常に機能していました。つまり、デフォルトの実装Showに制約を追加する必要があります。get問題は、制約の書き方がわからないことです。-- HELP!!!以下のコードのコメントを参照してください。

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

haskell - 汎用ベクトルの ListIsomorphic インスタンスを作成するにはどうすればよいですか?

次のクラスがあるとします。

を使用してベクトル型のインスタンスを作成するにはどうすればよいData.Vector.Genericですか? これは機能しません:

私に与える:

0 投票する
1 に答える
198 参照

haskell - GHC.Generics Rep を構築し、値に変換する方法を理解する

の使い方を勉強しようと思っていますGHC.Generics。魅力的なトピックですが、難しいです。

ブログ エントリ24 日間の GHC 拡張機能: DeriveGenericを読みながら、値を取得してその をナビゲートする方法を学びましたRep。わかった。

しかし、ブログエントリBuilding data constructors with GHC Genericsを読んで、構築と値への変換の類似性を説明していRepて、困惑しました。 多く リソースを読みましたが、大きな助けにはなりませんでした。

ブログエントリには次のコードがあります。まず、以下を構築しRepます。

次に、次の処理を行いComposeます。

次に、型のあいまいさを処理します。

わお。

本当に、私はファンクタを返すクラスMkで、最初に立ち往生しています。mk私の質問:

  1. mk戻るとは何ですか?なぜファンクターなのですか?その結果の解釈は何ですか?のK1 i cインスタンスMkが、値を受け取って でラップする関数 (これはファンクタであることは理解しています) を返していることがわかりますK1mkMk (l :*: r)Mk (M1 i c f)は完全に失われています。

  2. Composeから来ていると推測しています。Data.Functor.Composeつまり、 を実行すると、構成されたファンクターの奥深くで 2 つのレベルが実行されます。しかし、 .内にネストされた s を理解できません。fmap f xfmapfmapCompose

  3. のインスタンスの場合M1 i c f、内部の値を でラップするだけだと思っていたので、またはM1の必要性は私には意味がありません。M1 <$> mkfmap M1 mk

明らかに、私はこれらのインスタンスの意図や意味、およびこれらのインスタンスがどのように相互作用して final を作成するかを理解しているわけではありませんRep。誰かが私を啓発しGHC.Generics、途中で使用する方法の良い説明を提供してくれることを願っています.

0 投票する
1 に答える
293 参照

haskell - ジェネリック SOP のレコード機能の取得

アプローチではSum of Products、レコード機能をどのように取得しますか? レコードのデータ型 ( ) を使用した以下のコード例ghc 7.10.3:

DataTypeInfo ghci プロンプトで見てみましょう:

とはどちらもfrecas文字列を取るコンストラクタを持つ型です。したがって、実際の関数とを取得する方法がわかりません。show exampleも見ましたが、レコード機能は使用していません。srecFieldInfoFieldInfofieldNamefrec :: Rec -> Intsrec :: Rec -> Maybe String

レコード関数を取得する方法についてのポインタを高く評価します (型の HList である可能性がありますHList '[(Rec -> Int), (Rec -> Maybe String)]))。

質問への補遺

user2407038 がレイアウトしたアプローチを使用して、プロジェクションから関数を取得する方法について、タイプ ノットに縛られています。SOPしたがって、さらに質問に追加したいと思います: コンストラクターのアプローチを使用して、以下のような関数を構築するにはどうすればよいですか?Recここでは、レコード フィールド名と関数の両方を使用します。

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

haskell - Generics を使用して Applicative ビルダー スタイルを実装する

環境

私たちが持っている場合

Applicative コンテキスト (ここでは IO) で Applicative スタイルを構築することができます。

問題

レコード フィールド名を明示的に書き出すことで構築したい場合はどうすればよいでしょうか? そのような:

これは型チェックしません。1つの解決策は

これは悪くありません。しかし、(この時点ではそれ自体のためだけに)次のことが機能するかどうか疑問に思います。

ベア パターン マッチングで実行できると思いますが、それではGHC.Generics型の安全性が確保されないため、より強力なアプローチを探していました。generics-sopレコードを異種リストに変換し、一見便利なhsequence操作が付属しているに遭遇しました。

行き詰まったポイント

generics-sopApplicative の型を異種リストの別の型パラメーターに格納しますI。生成された変換を使用する場合、それは常に (Identity) です。したがって、hlist をマップし、エレメントから を削除する必要がありますI。これにより、ApplicativeIが上記の型パラメーター ( になりますComp IO Maybe) に効果的に移動します。 .hsequenceI

しかし、削除/追加関数の型署名を記述する方法がわかりませんI。これは、それぞれの hlist 要素の型が外側の型を失う/獲得することによって一貫して変化することを伝えます。これは可能ですか?