1
votes

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!

3
min3 x y z = min (min x y) zSibi
Sounds like homework.augustss

3 Answers

5
votes

You can also write it as:

min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min
4
votes

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

1
votes

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.