私はこのようなサンプルタイプを持っています:
data Sample_Type = Sample_Type { field1 :: Int,
field2 :: Int,
field3 :: [Int]
} deriving (Show, Eq)
この関数を使用してfield3
、レコード内にリストを追加しています。
insertPlan :: [Sample_Type] -> Sample_Type -> Int -> [Sample_Type]
insertPlan [] _ _ = []
insertPlan (x:xs) y b = if (x == y)
then (y {field3 = b:(field3 y)}):xs
else x:(insertPlan xs y b)
上記の関数をより一般的な形式に変換しようとしています (更新が必要なリストが 1 つある多くのレコード データ型があるため)。
次のコードを思いつきましたが、うまくいきません (明らかに):
insertVariant :: [a] -> a -> (a -> [Int]) -> Int -> [a]
insertVariant (x:xs) a f b = if (x == a)
then (a {f = b:(f a)}):xs
else x:(insertVariant xs a b)
この問題を解決する良い方法はありますか?