Haskell:是否可以确定哪个函数作为参数传递给高阶函数?

标签 haskell

我想确定哪个函数作为参数传递给高阶函数。
我怎样才能做到这一点?使用模式匹配?
我想做类似以下代码的事情:

add x y = x+y
sub x y = x-y

myFunc :: (a->a->a) -> a -> a -> IO a
myFunc add x y = do print "add was performed"
                    add x y 
myFunc sub x y = do print "sub was performed"
                    sum x y
myFunc f x y = do print "another function was performed"
                  f x y

如果这是不可能的,有没有人有其他想法可以做到这一点?

最佳答案

不,这是不可能的。

您可以通过具有表示操作的数据类型来实现该效果,也许

data Operation
    = Add (a -> a -> a)
    | Sub (a -> a -> a)
    | Other (a -> a -> a)

myFunc :: Operation -> a -> a -> IO a
myFunc (Add f) x y = do print "add was performed"
                     return (f x y)
myFunc (Sub f) x y = do print "sub was performed"
                     return (f x y)
myFunc (Other f) x y = do print "another function was performed"
                     return (f x y)

关于Haskell:是否可以确定哪个函数作为参数传递给高阶函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746196/

相关文章:

haskell - 如何在 Clojure 中进行列表理解?

haskell - 为什么这种斐波那契的实现速度非常快?

Haskell:此代码中错误 "Ambiguous type variable ... ` Integral t' ... `RealFrac t' ..."的来源是什么?

haskell - let 表达式中的 case 表达式是否需要大括号和分号?

c++ - 使用 C++ 模板实现 Haskell 的 `map` 函数的问题

haskell - 为什么将数据类型作为约束添加到类型声明会导致匹配错误而不是更正确的错误?

list - Haskell 中的替代 ZipList 实例?

haskell - 有没有办法快捷地将处理程序添加到 Yesod?

haskell - 从 Haskell 调用 Clojure 函数

haskell - 如何查找具有开始和结束索引的字符串的所有子字符串