Dependently-typed programming

Dependently-typed programming refers to type-level programming where prior data types determine the types of subsequent values.

By doing type-checking computations, the dependently-typed programming style allows for more nuanced type definitions. For instance, instead of defining a type for "list of numbers", we might go further with the dependently-typed "list of numbers of size n" or "list of distinct strings".

For example, it is easy to implement sprintf in an untyped way, but this function is notoriously difficult to implement in a type-safe language because the return type depends on the value of the format string:

  sprintf "%s"  :: String -> String
  sprintf "%d"  :: Int -> String

To do this in Haskell, we require dependently-typed ...

Get Haskell Design Patterns now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.