Reputation: 33
Is there a way to compose these functions together?
data Patient = Patient
{ name :: Name,
sex :: Sex,
age :: Int,
height :: Int,
weight :: Int,
bloodType :: BloodType
}
canDonate :: BloodType -> BloodType -> Bool
canDonateTo :: Patient -> Patient -> Bool
Currently I'm just manually applying them
canDonateTo :: Patient -> Patient -> Bool
canDonateTo x y = canDonate (bloodType x) (bloodType y)
However, I'm wondering if there is a better way to do it.
Upvotes: 3
Views: 99
Reputation: 531055
Use Data.Function.on
:
import Data.Function (on)
canDonateTo = canDonate `on` bloodType
(Basically, your approach just inlined the definition of on
, which could be defined as
on f g x y = f (g x) (g y)
)
Upvotes: 9