重複するフィールドを持つレコードタイプを統合する
私は次のコードを持っています:
workWithImportantField :: forall fields. { importantField :: Int | fields } -> Input
workWithImportantField = ...
workWithImportantField $
maybe { importantField: 1 } identity (Just { importantField: 1, fieldIDontCareAbout: "whatever" })
最初のレコードに。がないため、これはコンパイルされませんfieldIDontCareAbout
。ただし、に統合されforall fields. { importantField :: Int | fields }
てに渡されれば、私は完全に元気ですworkWithImportantField
。どうすればそれを行うことができますか?
さまざまな場所(最初のレコード、2番目のレコード、式全体)に型注釈を追加しようとしましたが、成功しませんでした。私はいつも置き換えることができidentity
てunsafeCoerce
、私はタイプセーフな解決をしたいと思います。私はまた、手動で置き換えることによって、私は必要なフィールドを選ぶことができidentity
て\{ importantField } -> { importantField }
、それは素敵に見えるしません。
回答
bklaric
Record.Extraidentity
でpick
見つかったものに置き換えると、2番目のレコードから「破棄」されfieldIDontCareAbout
、タイプが統一されます。