是否可以在haskell中使用参数化定义?

War*_*lan 1 haskell

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

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

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

min' x y
  | x < y = x
  | otherwise = y
Run Code Online (Sandbox Code Playgroud)

变成类似的东西

(max',min') x y
  | x (>,<) y = x
  | otherwise = y
Run Code Online (Sandbox Code Playgroud)

编辑:

我知道这可以让我们对"脾气暴躁的脸"进行参数化,但似乎仍然可以有更简洁的形式.

maxmin x y f
  | f x y = x
  | otherwise = y

max' x y = maxmin x y (>)
min' x y = maxmin x y (<)
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 10

好吧,你总能做到这一点:

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

max' = select (>)
min' = select (<)
Run Code Online (Sandbox Code Playgroud)

即将公共部分提取到函数中并将差异转换为参数.