【发布时间】:2013-10-27 03:31:23
【问题描述】:
考虑这段代码:
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 的实现将如下所示:
func char
|isDigit char = digitToInt char + digitToInt y
|otherwise = digitToInt y
这显然行不通,因为func 不知道y 是什么,但这就是它应该做什么的想法。所以y 是我需要以某种方式让func 知道的值(这是我在main 第二行从用户那里得到的值)。我不能在func 内做getLine,因为这与我无法更改的数据类型(大型框架的一部分)不一致。有任何想法吗?也许一些辅助函数可以替换let graph = (x, func)中的func,然后返回函数类型的函数?这只是一个猜测..
【问题讨论】:
-
我不太确定“
func由第三方实施”是什么意思。你的意思是“我希望第三方能够实现这样的funcs”吗? -
对不起,我误导了,我的意思是“图形”已经在我正在使用的框架中实现,并且需要一个 Function 类型的函数作为第二个参数。
标签: haskell