How Do I Create a New Data Type in Haskell?


Heather Bennett

Creating a New Data Type in Haskell

Haskell is a powerful and expressive programming language known for its strong type system. One of the key features of Haskell is its ability to define custom data types, which allows developers to create their own structures and organize data in a way that best suits their needs. In this tutorial, we will explore how to create a new data type in Haskell.

Defining a New Data Type

To define a new data type in Haskell, we use the data keyword followed by the name of the type. Let’s say we want to create a data type called Person, which represents information about an individual. We can define it as follows:

data Person = Person { name :: String, age :: Int }

The above code snippet creates a new data type called Person. It has two fields: name, which is of type String, and age, which is of type Int. By using this syntax, we have defined a structure that represents a person with their name and age.

Using the New Data Type

Now that we have defined our new data type, let’s see how we can use it in our code. We can create instances of the Person type by calling its constructor function with appropriate values for each field. Here’s an example:

person1 :: Person
person1 = Person { name = "John Doe", age = 30 }

In the above code snippet, we have created an instance of the Person type called person1. We provided the values “John Doe” for the name field and 30 for the age field.

We can access the fields of a Person instance using dot notation. For example, to get the name of person1, we can write name person1. Similarly, to get the age, we can write age person1.

Pattern Matching with the New Data Type

Pattern matching is a powerful feature in Haskell that allows us to deconstruct data types and perform different actions based on their structure. Let’s see how we can use pattern matching with our custom data type.

Suppose we want to write a function that takes a Person instance and returns their name concatenated with a greeting. We can define it as follows:

greet :: Person -> String
greet (Person { name = n }) = "Hello, " ++ n ++ "!"

In the above code snippet, we define a function called greet. It takes a single argument of type Person.

Inside the function definition, we use pattern matching to extract the name field from the given Person instance. We then concatenate it with a greeting message and return the resulting string.


You have successfully learned how to create a new data type in Haskell. By defining custom data types, you can create structures that accurately represent your domain and make your code more expressive and maintainable.

Remember to experiment with different variations of custom data types and explore more advanced concepts such as type constructors and type parameters to further enhance your Haskell programming skills.

  • Define a new data type using the data keyword.
  • Use the constructor function to create instances of the new data type.
  • Access fields of a data type using dot notation.
  • Utilize pattern matching to deconstruct the data type and perform different actions based on its structure.

Now, go ahead and apply your newfound knowledge to create powerful and expressive Haskell programs!

Discord Server - Web Server - Private Server - DNS Server - Object-Oriented Programming - Scripting - Data Types - Data Structures

Privacy Policy