例として、フロントホイール&(後輪)と、直径を表すIntを持つ自転車があります。Haskell:変数に基づくレコード内のフィールドの置き換え
type Wheel = Int
data Bike = Bike { frontwheel :: Wheel, rearwheel :: Wheel }
deriving (Show)
mybike = Bike 24 26
私は、彼らはさまざまなサイズだと好きではないので、今私は、ホイールを交換したい:
replaceFrontWheel :: Bike -> Wheel -> Bike
replaceFrontWheel bike wheel = bike { frontwheel = wheel }
repairedbike = replaceFrontWheel mybike 26
作品!
しかし、フロントを交換する機能を望むなら、またはリアホイール?どちらのホイールはホイール(INT)の後に、すべてのタイプのものであり、なぜ同様のパラメータとしてフィールドを取り、単一の機能でそれをしない:それは動作しない理由を私は理解して
replaceWheel bike position wheel = bike { position = wheel }
repairedbike = replaceWheel mybike frontwheel 26
。 position
は、値がfrontwheel
であると解釈されず、存在しないフィールドとしてposition
がBike
と解釈されます。
(JS)mybike[position] = 26
または(PHP)$mybike->$position = 26
のHaskellアナログがありますか?
外部モジュールなしでエレガントにできますか?
レンズを使用することは可能ですか?
これは、レンズが大部分を占めています。 – melpomene