Interfaces and Type Classes

Interfaces, in the sense used here, work on several levels. Here’s a standard example from Haskell that will be familiar to Java programmers: the “comparable” interface. I’ll explain it in two stages—first, an underlying equality test, then the wider less-than-or-equal test.

 class Eq a where
  (==) :: a -> a -> Bool
 
 class Eq a => Ord a where
  (<=) :: a -> a -> Bool
  compare :: a -> a -> Ordering -- LT or EQ or GT

The technical term for entities like the preceding is “type class,” intuitively identifying a set of types that provide the listed functionality. I prefer the more informal term “interfaces,” since what we’re doing is describing some functionality that can be assumed for some type, or a promise of ...

Get Functional Programming: A PragPub Anthology now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.