作爲示例,我有一輛自行車,前輪&後輪,它們都只有一個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
,而是作爲Bike
的(不存在的)字段position
。
Haskell模擬的(JS)mybike[position] = 26
或(PHP)$mybike->$position = 26
?
是否有可能沒有任何外部模塊的優雅方式?
否則,是否有可能使用鏡頭?
這幾乎是鏡頭的一切。 – melpomene