WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Haskell · Intermediate · question 35 of 100

What is a type variable in Haskell? How is it different from a concrete type?

📕 Buy this interview preparation book: 100 Haskell questions & answers — PDF + EPUB for $5

A type variable in Haskell is a placeholder for an actual type that can be used in type signatures for polymorphic functions or in defining type classes. It is similar to a variable in algebra, which can represent any value. In the context of Haskell type signatures, a type variable represents any type.

A concrete type, on the other hand, is a specific, well-defined type that is not a placeholder. Examples of concrete types are ‘Int‘, ‘Char‘, ‘Bool‘, and functions with specific input and output types like ‘(Int -> Char)‘. Concrete types are the actual types you use as arguments or return values in your functions.

Type variables are usually represented by lowercase letters (e.g., ‘a‘, ‘b‘, ‘c‘). The important distinction is that a type variable can be replaced with any concrete type or another type variable, as long as it is consistent within the function or expression.

Here’s an example to illustrate the difference between type variables and concrete types. Let’s consider the identity function:

id :: a -> a
id x = x

In this case, ‘a‘ is a type variable. It means that the identity function ‘id‘ can take an argument of any type (e.g., ‘Int‘, ‘Char‘, or ‘Bool‘). We would refer to ‘id‘ as a polymorphic function because it can handle any input type. The type signature says that the function should return a value of the same type as its argument.

Now, let’s look at an example of a concrete type:

addOne :: Int -> Int
addOne x = x + 1

In this example, the function ‘addOne‘ has a concrete type signature of ‘Int -> Int‘. It can only accept an ‘Int‘ as input and return an ‘Int‘ as output.

So, the main difference between type variables and concrete types is that type variables are used to represent unspecified types (allowing for polymorphism in functions and type classes), whereas concrete types are specific and well-defined types used in various contexts of a Haskell program.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Haskell interview — then scores it.
📞 Practice Haskell — free 15 min
📕 Buy this interview preparation book: 100 Haskell questions & answers — PDF + EPUB for $5

All 100 Haskell questions · All topics