我正在尝试创建一个函数,它将一个可变函数作为参数,即
func :: (a -> ... -> a) -> a
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
我已经阅读了关于多变量函数的信息,我确信Oleg已经做到了,但是我试图将这个模式应用于具有可变函数作为参数的函数.特别是Olegs方法似乎只适用于格拉斯哥扩展,我希望解决方案在纯Haskell 98中工作(就像Text.Printf一样).
我问的原因是我正在尝试构建一个函数,该函数将布尔函数作为参数并检查它是否是重言式,即
isTautology :: (Bool -> ... -> Bool) -> Bool
Run Code Online (Sandbox Code Playgroud)
所以可以输入:
isTautology (\x -> x && not x)
isTautology (\x y -> x && y || not y)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我一直在阅读的技巧是使返回类型成为一个类型变量(这样它可以是结果或另一个函数),但我的返回类型是固定的(Bool).
Haskell中的FlexibleInstances有什么问题?为什么他们不包含在Haskell 2010中?FlexibleInstances的实现是不是足够稳定以包含在标准中,还是与FlexibleInstances相关的更深层关注?使用它们是否安全?他们可能会被纳入Haskell Prime吗?