Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在haskell的另一个函数中调用返回元组的函数?_Haskell - Fatal编程技术网

如何在haskell的另一个函数中调用返回元组的函数?

如何在haskell的另一个函数中调用返回元组的函数?,haskell,Haskell,我有两个类似的功能: notice_objects_at::String -> IO() notice_objects_at place = do let (X,Y) = at place putStrLn ("There is a" ++ show X ++ "," ++ show Y ++ "here.") putStrLn "Hi" at::String-> (String, String) at place = case place of "bed

我有两个类似的功能:

notice_objects_at::String -> IO()
notice_objects_at place = do
  let (X,Y) = at place
  putStrLn ("There is a" ++ show X ++ "," ++ show Y ++ "here.")
  putStrLn "Hi" 

at::String-> (String, String)
at place =
  case place of
    "bedroom" -> ("fly", "light switch")
    "den" -> ("flyswatter", "light switch")
从'at'函数返回一个元组,我想将其存储到notice_objects_at函数中的两个变量X和Y。但是,我得到了一个错误:

Not in scope: data constructor ‘X’
Not in scope: data constructor ‘Y’
Not in scope: data constructor ‘X’
Not in scope: data constructor ‘Y’

怎么了?

Haskell语法依赖于名称的大写。如上所述:

任何以大写字母开头的内容都是具体类型 或数据构造函数。小写起始名称保留给 函数名和变量,包括类型变量

因此,当您将名称绑定到中元组的元素时:

let (X,Y) = at place
您需要小写名称:

let (x,y) = at place
(当然,在其他使用名称的地方调整名称!)

否则,Haskell会将这些名称解释为数据构造函数,但当然,在任何地方都找不到它们的定义,因此会出现错误消息


另请参见
x
而不是
x
y
而不是
y
。只有类型和模块以大写字母开头。我不认为这个问题应该作为印刷错误来解决。这是一个“小”错误,但不是印刷错误:
X
是故意使用的,是一个真正的语言问题,而不仅仅是键盘上的胖手指。“显然,只有类型和模块以大写字母开头”和数据构造函数。@amalloy:我的推理是,所述问题是“由……一个简单的印刷错误引起的。”我可以想象一个重新措辞的问题,DNA的答案哪个是合适的,哪个是主题。看见