minBound and maxBound are typeclass functions. Typeclass's are a similar to java interfaces.
So the Bounded typeclass is defined as
class Bounded a where
minBound :: a
maxBound :: a
If you have a function and you want the argument to be Bounded you write allLessThan :: (Enum a, Bounded a)=> a -> [a]
allLessThan x = [minBound..x]
Here `a` is a generic type. That implements the Enum and Bounded typeclass. You could just write `allLessThan x = [minBound..x]` and Haskell with infer the type classes by itself.To implement the typeclass you use `instance`, like so:
data MyType = A | B | C | D
instance Bounded MyType where
minBound = A
maxBound = D