Ich prüfe einige Codes und kam über das folgende Juwel, das ich wetten würde, ist eine copy-paste von pointfree
Ausgabe:Was sind die Schritte, um diesen Pointfree-Code abzuleiten?
(Ich dachte, die folgende wäre besser geeignet als die üblichen foo
/bar
für diese spezielle Frage : P)
import Control.Monad (liftM2)
data Battleship = Battleship { x :: Int
, y :: Int
} deriving Show
placeBattleship :: Int -> Int -> Battleship
placeBattleship x' y' = Battleship { x = x', y = y' }
coordinates :: Battleship -> (Int, Int)
coordinates = liftM2 (,) x y
Wäre jemand so freundlich, von notwendig, um die Schritte zu erklären, zu vereinfachen:
(i) coordinates b = (x b, y b)
zu:
(ii) coordinates = liftM2 (,) x y
?
Insbesondere bin ich ein wenig verwirrt in Bezug auf die Verwendung von liftM2
, da ich nicht einmal bewusst war, dass eine Monade im Hintergrund lauerte.
Ich weiß, dass (i) kann auch dargestellt werden als: coordinates s = (,) (x s) (y s)
, aber ich bin mir nicht sicher, wo/wie vorzugehen.
P.S. Hier finden Sie, warum ich vermute, es ist von pointfree
(Ausgabe ist von GHCI
und :pl
ist aliased zu pointfree
):
λ: :pl coordinates s = (x s, y s)
coordinates = liftM2 (,) x y