Встроенная прагма скопирует содержимое функции (в данном случае fmapR
) в место, где она вызывается, если компилятор может доказать, что используемый функтор равен IResult
.
Функция не может быть встроена в следующем случае, поскольку определение fmap
неизвестно:
f :: Functor f => f Int -> f Float
f = fmap fromIntegral
Здесь, однако, это известно, потому что используется определенный функтор, и функция может быть встроенной:
f :: IResult Int -> IResult Float
f = fmap fromIntegral
-- rewritten to: f = fmapR fromIntegral; might be further inlined