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

Haskell · Basic · question 18 of 100

Explain how you would create and use a tuple in Haskell.?

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

A tuple in Haskell is a collection of values with a fixed length and can contain elements of different types. Tuples are useful when you want to group several values together without defining a custom data type or using a list since lists require all elements to be of the same type.

To create a tuple, simply place a comma-separated list of values inside parentheses ‘()‘. Here’s an example:

myTuple :: (Int, String, Char, Double)
myTuple = (42, "hello", 'c', 3.14)

In this example, ‘myTuple‘ is a tuple of size 4, containing elements of types ‘Int‘, ‘String‘, ‘Char‘, and ‘Double‘ respectively.

Now, let’s discuss some ways to use a tuple in Haskell:

1. Accessing tuple elements: You can access the elements of a tuple using pattern matching or built-in functions such as ‘fst‘ and ‘snd‘ (for 2-element tuples).

Using pattern matching:

   getFirstElement :: (a, b) -> a
   getFirstElement (x, _) = x

   getSecondElement :: (a, b) -> b
   getSecondElement (_, y) = y

Using ‘fst‘ and ‘snd‘:

   myTuple2 :: (Int, String)
   myTuple2 = (42, "hello")

   firstElement = fst myTuple2    -- 42
   secondElement = snd myTuple2   -- "hello"

Note that ‘fst‘ and ‘snd‘ only work with 2-element tuples.

2. Tuple manipulation: You can also use tuples in functions, apply functions on tuples, and create tuples from other tuples.

Function using tuples as input and output:

   swapElements :: (a, b) -> (b, a)
   swapElements (x, y) = (y, x)

Applying a function to a tuple (using the ‘***‘ operator from ‘Control.Arrow‘):

   import Control.Arrow ((***))

   myTuple3 :: (Int, String)
   myTuple3 = (41, "world")

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

   reverseStr :: String -> String
   reverseStr = reverse

   modifiedTuple = addOne *** reverseStr $ myTuple3  -- (42, "dlrow")

3. Lists of tuples: You can also create and manipulate lists of tuples, which are useful for representing relations or pairs of values.

Example: Compute the sum of a list of pairs of integers:

   listOfPairs :: [(Int, Int)]
   listOfPairs = [(1, 2), (3, 4), (5, 6)]

   sumPairs :: [(Int, Int)] -> [Int]
   sumPairs = map $ (x, y) -> x + y

   sumResult = sumPairs listOfPairs  -- [3, 7, 11]

In conclusion, tuples in Haskell are versatile and can be used in various ways to group and manipulate heterogeneous collections of values.

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