cvr
cvr

Reputation: 33

how to compose functions that return Bool together

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

Answers (1)

chepner
chepner

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

Related Questions