問題タブ [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.
haskell - GHC.Generics の「packageName」
タイプのグローバルに一意の識別子を提供するクラスがあります。
これはほとんど機能します:
しかし、次のデータ型のパッケージを取得できませんGHC.Generics
:
できますか?パッケージがなければ、GUI は実際には「グローバルに」ユニークではありません。
ところで、私Data.Typeable
は書くことができることを知っています:
それは私ができることです。しかし、私は興味がありGHC.Generics
ます。
haskell - 「from」の使用から生じる (Generic (fa)) のインスタンスなし
次のコードに適した型制約を見つけるのに問題があります
で失敗します
gname
このように制約を追加する
で失敗します
編集:完全なスニペットの完全なエラー メッセージ
これは GHC 7.6.3 の場合です。
haskell - GHC.Generics 使用時に Show 制約を追加する
GHCジェネリックを使用しています。私の使用例は、遺伝子配列をエンコードおよびデコードしていることを除いて、wiki の例とほとんど同じです。
エラーが発生した場合にユーザーに報告できるように、既に読んだもののリストを保持することにするまで、これはすべて正常に機能していました。つまり、デフォルトの実装Show
に制約を追加する必要があります。get
問題は、制約の書き方がわからないことです。-- HELP!!!
以下のコードのコメントを参照してください。
haskell - 汎用ベクトルの ListIsomorphic インスタンスを作成するにはどうすればよいですか?
次のクラスがあるとします。
を使用してベクトル型のインスタンスを作成するにはどうすればよいData.Vector.Generic
ですか? これは機能しません:
私に与える:
haskell - GHC.Generics Rep を構築し、値に変換する方法を理解する
の使い方を勉強しようと思っていますGHC.Generics
。魅力的なトピックですが、難しいです。
ブログ エントリ24 日間の GHC 拡張機能: DeriveGenericを読みながら、値を取得してその をナビゲートする方法を学びましたRep
。わかった。
しかし、ブログエントリBuilding data constructors with GHC Genericsを読んで、構築と値への変換の類似性を説明していRep
て、困惑しました。他の 多く の リソースを読みましたが、大きな助けにはなりませんでした。
ブログエントリには次のコードがあります。まず、以下を構築しRep
ます。
次に、次の処理を行いCompose
ます。
次に、型のあいまいさを処理します。
わお。
本当に、私はファンクタを返すクラスMk
で、最初に立ち往生しています。mk
私の質問:
mk
戻るとは何ですか?なぜファンクターなのですか?その結果の解釈は何ですか?のK1 i c
インスタンスMk
が、値を受け取って でラップする関数 (これはファンクタであることは理解しています) を返していることがわかりますK1
がmk
、Mk (l :*: r)
とMk (M1 i c f)
は完全に失われています。Compose
から来ていると推測しています。Data.Functor.Compose
つまり、 を実行すると、構成されたファンクターの奥深くで 2 つのレベルが実行されます。しかし、 .内にネストされた s を理解できません。fmap f x
fmap
fmap
Compose
のインスタンスの場合
M1 i c f
、内部の値を でラップするだけだと思っていたので、またはM1
の必要性は私には意味がありません。M1 <$> mk
fmap M1 mk
明らかに、私はこれらのインスタンスの意図や意味、およびこれらのインスタンスがどのように相互作用して final を作成するかを理解しているわけではありませんRep
。誰かが私を啓発しGHC.Generics
、途中で使用する方法の良い説明を提供してくれることを願っています.
haskell - ジェネリック SOP のレコード機能の取得
アプローチではSum of Products
、レコード機能をどのように取得しますか? レコードのデータ型 ( ) を使用した以下のコード例ghc 7.10.3
:
DataTypeInfo
ghci プロンプトで見てみましょう:
とはどちらもfrec
as文字列を取るコンストラクタを持つ型です。したがって、実際の関数とを取得する方法がわかりません。show exampleも見ましたが、レコード機能は使用していません。srec
FieldInfo
FieldInfo
fieldName
frec :: Rec -> Int
srec :: Rec -> Maybe String
レコード関数を取得する方法についてのポインタを高く評価します (型の HList である可能性がありますHList '[(Rec -> Int), (Rec -> Maybe String)]
))。
質問への補遺
user2407038 がレイアウトしたアプローチを使用して、プロジェクションから関数を取得する方法について、タイプ ノットに縛られています。SOP
したがって、さらに質問に追加したいと思います: コンストラクターのアプローチを使用して、以下のような関数を構築するにはどうすればよいですか?Rec
ここでは、レコード フィールド名と関数の両方を使用します。
haskell - Generics を使用して Applicative ビルダー スタイルを実装する
環境
私たちが持っている場合
Applicative コンテキスト (ここでは IO) で Applicative スタイルを構築することができます。
問題
レコード フィールド名を明示的に書き出すことで構築したい場合はどうすればよいでしょうか? そのような:
これは型チェックしません。1つの解決策は
これは悪くありません。しかし、(この時点ではそれ自体のためだけに)次のことが機能するかどうか疑問に思います。
ベア パターン マッチングで実行できると思いますが、それではGHC.Generics
型の安全性が確保されないため、より強力なアプローチを探していました。generics-sop
レコードを異種リストに変換し、一見便利なhsequence
操作が付属しているに遭遇しました。
行き詰まったポイント
generics-sop
Applicative の型を異種リストの別の型パラメーターに格納しますI
。生成された変換を使用する場合、それは常に (Identity) です。したがって、hlist をマップし、エレメントから を削除する必要がありますI
。これにより、ApplicativeI
が上記の型パラメーター ( になりますComp IO Maybe
) に効果的に移動します。 .hsequence
I
しかし、削除/追加関数の型署名を記述する方法がわかりませんI
。これは、それぞれの hlist 要素の型が外側の型を失う/獲得することによって一貫して変化することを伝えます。これは可能ですか?