Haskell Rewriting Min Class

2019-09-19 17:02发布

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条回答
乱世女痞
2楼-- · 2019-09-19 17:10

You can also write it as:

min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min
查看更多
祖国的老花朵
3楼-- · 2019-09-19 17:13

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.

查看更多
放我归山
4楼-- · 2019-09-19 17:19

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

查看更多
登录 后发表回答