Haskell Rewriting Min Class

霸气de小男生 提交于 2019-12-13 08:06:30

问题


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!


回答1:


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




回答2:


You can also write it as:

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



回答3:


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.



来源:https://stackoverflow.com/questions/22836320/haskell-rewriting-min-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!