honesty is a field label, so effectively it creates a function honesty :: Volunteer -> Bool This should fix it: if (honesty volunteer) then "drinkable" else "undrinkable"