stavo rivedendo un po 'di codice e sono imbattuto nel seguente gemma, che scommetto è un copia-incolla di pointfree
uscita:Quali sono i passaggi per dedurre questo codice pointfree?
(ho pensato che il seguente sarebbe più appropriata rispetto alla solita foo
/bar
per questa particolare domanda : 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
qualcuno essere così gentile da spiegare i passi necessari per semplificare da:
(i) coordinates b = (x b, y b)
a:
(ii) coordinates = liftM2 (,) x y
?
In particolare, sono un po 'confuso sull'uso di liftM2
poiché non ero nemmeno a conoscenza del fatto che una monade si nascondesse in sottofondo.
So che (i) può anche essere rappresentato come: coordinates s = (,) (x s) (y s)
ma non sono sicuro di dove/come procedere.
P.S. Quello che segue è il motivo per cui ho il sospetto che sia da pointfree
(uscita è da GHCI
e :pl
è alias a pointfree
):
λ: :pl coordinates s = (x s, y s)
coordinates = liftM2 (,) x y