ประเภทของ fmap ใน Functor คือ:
fmap :: Functor f => (a -> b) -> f a -> f b
ดูเหมือนว่า ขั้นแรกให้ใช้ฟังก์ชัน (a -› b) กับพารามิเตอร์ของ f a เพื่อสร้างผลลัพธ์ประเภท b จากนั้นใช้ f กับมัน และผลลัพธ์คือ f b
ใช้ Maybe a
เช่น:
fmap show (Just 1)
result is : Just "1"
เช่นเดียวกับการพูดว่า:
Just (show 1)
แต่เมื่อใช้ (->)
เป็น Functor (ใน Control.Monad.Instances
)
import Control.Monad.Instances
(fmap show Just) 1
result is : "Just 1"
นั่นคือ Just
จะถูกนำไปใช้ก่อน จากนั้น show
จะถูกนำไปใช้ ในอีกตัวอย่างหนึ่ง ผลลัพธ์จะเหมือนกัน:
fmap (*3) (+100) 1
result is 303
ทำไมไม่ *3
ก่อนแล้วจึง +100
?