次のように新しいデータ型を作成したとします。
data Typex = Typex {
level :: Int,
coordinate :: (Int, Int),
connections :: [(Int,(Int,Int),Double)] -- edited to be a tuple
} deriving Show
を使用する上位レベルから接続を変更したい[[TypeX]]
。カスタムタイプにネストされたループ、fmap、ファンクターインスタンスが必要ですか、それとも何を提案しますか?
まず、単一の接続をどのように変更するかを説明します。名前を付けます:
modConnection (i, (j, k), d) = (i + 42, (j*5, k), d)
接続のリスト全体を更新するには、次を使用しますmap
。
modConnections cons = map modConnection cons
レコードのフィールドを更新するには、Haskellレコード更新構文を使用します。
modTypeX :: TypeX -> TypeX
modTypeX tx = tx { connections = modConnections (connections tx) }
これらのレコードのリスト全体を更新するには、次をmap
再度使用します。
modTypeXList txs = map modTypeX txs
そして最後に、これらのリストのリスト全体を更新するには、map
もう一度使用します。
modTypeXListList txs = map modTypeXList txs
もちろん、すべての中間関数に名前を付けたくない場合は、名前を付ける必要はありません。すべてをインラインで行うことができます。
modTypeXListList = map . map $ \tx -> tx { connections = map modConnection (connections tx) }
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加