-1

I'm quite new to Haskell and I'm writing a function that is similar to min instead of just accepting 2 values it'll accept 3. I've worked out the class as shown here:

min3 :: a -> a -> a -> a

However what would I put with the function itself after writing how many input variables?

min3 x y z = 

This is probably stupidly easy and I'm missing something but if you could please help me out I would really appreciate it.

Thanks!

Liamh101
  • 49
  • 1
  • 10

3 Answers3

5

You can also write it as:

min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min
Lee
  • 142,018
  • 20
  • 234
  • 287
4

One implementation

min3 :: Ord a => a -> a -> a -> a
min3 x y z = min x $ min y z

Notes:

  • In the type definition you have to write Ord a => ... because your arguments shall be ordable, i.e. the min function has to be defined for them.

@Lee provides a point free implementation which also can be written as

import Data.Composition ((.:))

min3 :: Ord a => a -> a -> a -> a
min3 =  min .: min

Note: f .: g is a shortcut for (f .) . g which is defined in Data.Composition

Stephan Kulla
  • 4,739
  • 3
  • 26
  • 35
1

Another implementation:

min3 x y z = head $ sort [x,y,z]

And this could be easily generated to a function that can find the minimum in a list:

minimum = head . sort

Data.List gives a different implementation of minimum.

Lee Duhem
  • 14,695
  • 3
  • 29
  • 47