フィールドを持つ、似たようなデータ構造を変換しつつ構築するとき、((->) a)
の Applicative インスタンスを好んで使う。この例の計算には全く意味は無いが。
import Control.Applicative
data Point = Point {x :: Int, y :: Int} deriving Show
data Rect = Rect { p1 :: Point, p2 :: Point } deriving Show
main = print $ Rect
<$> (Point
<$> (2*) . y
<*> (3*) . x
) . p2
<*> (Point
<$> x
<*> y
) . p1
$ Rect (Point 1 2) (Point 3 4)