重複するフィールドを持つレコードタイプを統合する
Dec 31 2020
私は次のコードを持っています:
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 Dec 31 2020 at 05:10
Record.Extraidentityでpick見つかったものに置き換えると、2番目のレコードから「破棄」されfieldIDontCareAbout、タイプが統一されます。