考虑这段代码:
type Graph = (Char, Function)
type Function = Char -> Int
doThingsWithGraph :: Graph -> String
func :: Function
graph :: Graph
main = do x <- getChar
y <- getChar
let graph = (x, func)
putStrLn $ doThingsWithGraph graph
的实施doThingsWithGraph
暂时无关紧要。现在这里的问题是func
' 的输出还取决于我从用户那里获得的第二个字符,但我不知道如何将它传递给它。我不能将它作为参数传递,因为 func 是由第三方实现的,我无法更改类型。因此,如果 haskell 具有全局变量并且y
是其中之一,那么func
's 的实现将如下所示:
func char
|isDigit char = digitToInt char + digitToInt y
|otherwise = digitToInt y
这显然行不通,因为func
不知道是什么y
,但这就是它应该做什么的想法。我y
需要以某种方式func
告知的价值也是如此(这是我在第二行从用户那里获得的价值main
)。我不能在getLine
里面做,func
因为这与我无法更改的数据类型(大型框架的一部分)不一致。有任何想法吗?也许一些辅助函数可以替换func
inlet graph = (x, func)
然后返回函数类型的函数?这只是猜测。。