在haskell中有参数化定义的可能性?

在haskell中有参数化定义的可能性?,haskell,Haskell,有没有一种方法可以通过case在haskell中紧凑地编写多个定义,而不必重复输入参数以外的完全相同的语法?到目前为止,我能想到的唯一可能的解决方案是宏 下面是定义二进制最大和最小函数的示例。我们能压缩吗 max' x y | x > y = x | otherwise = y min' x y | x < y = x | otherwise = y max'x y |x>y=x |否则=y 最小x y |x,嗯,您可以随时这样做: select op x y

有没有一种方法可以通过case在haskell中紧凑地编写多个定义,而不必重复输入参数以外的完全相同的语法?到目前为止,我能想到的唯一可能的解决方案是宏

下面是定义二进制最大和最小函数的示例。我们能压缩吗

max' x y
  | x > y = x
  | otherwise = y

min' x y
  | x < y = x
  | otherwise = y
max'x y
|x>y=x
|否则=y
最小x y
|x
变成

(max',min') x y
  | x (>,<) y = x
  | otherwise = y
(最大’,最小)x y

|x(>,嗯,您可以随时这样做:

select op x y
    | x `op` y  = x
    | otherwise = y

max' = select (>)
min' = select (<)
选择op x y
|x`op`y=x
|否则=y
max'=选择(>)

min'=select(嗯,您总是可以这样做:

select op x y
    | x `op` y  = x
    | otherwise = y

max' = select (>)
min' = select (<)
选择op x y
|x`op`y=x
|否则=y
max'=选择(>)

min'=select(例如,我支持这种脾气暴躁的面部语法
(>,有较短的方法来编写
maxmin
-@melpomene的答案,它将函数(
()
)首先,可以省略
x
y
参数,这是一个很好的方法,但可能不是更清晰的方法。例如,您可以进行一些无点代码高尔夫运动,并将其函数编写为
select=liftA2()(flip bool)
数据中使用
bool
。bool
,它扩展为
选择fxy=if fxy然后x else y
。有时这种欺骗是有利可图的,但通常在Haskell中,只编写显式的保护或
if
。例如,我支持这种脾气暴躁的面部语法
(>,有较短的方法来编写
maxmin
-@melpomene的答案,它将函数(
()
)放在第一位,因此可以省略
x
y
参数,这是一种很好的方法,但可能不是任何更清晰的方法。例如,您可以进行一些无点代码高尔夫运动,并将其函数编写为
select=liftA2()(翻转bool)
使用
Data.bool
中的
bool
,它扩展到
选择fxy=if fxy然后x else y
。有时这种欺骗是有利可图的,但通常在Haskell中,只编写显式的保护或
if
更为清晰。