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!
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
You can also write it as:
min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min
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
.