Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 不能';t匹配预期类型‘;IO()’;实际类型[地点]_Haskell - Fatal编程技术网

Haskell 不能';t匹配预期类型‘;IO()’;实际类型[地点]

Haskell 不能';t匹配预期类型‘;IO()’;实际类型[地点],haskell,Haskell,试图运行一些haskell代码,但它没有运行。给我上面看到的错误 type Name = String type Location = (Float,Float) type RainfallFigures = [Int] type Place = (Name,Location,RainfallFigures) testData::[Place] testData=[("London", (51.5, -0.1), [0, 0, 5, 8, 8, 0, 0]),("Cardiff", (51.5

试图运行一些haskell代码,但它没有运行。给我上面看到的错误

type Name = String
type Location = (Float,Float)
type RainfallFigures = [Int]
type Place = (Name,Location,RainfallFigures)

testData::[Place]
testData=[("London", (51.5, -0.1), [0, 0, 5, 8, 8, 0, 0]),("Cardiff", (51.5 , -3.2),[12, 8, 15, 0, 0, 0, 2])]

rtnNames::[Place] -> [Place]
rtnNames x=x 


demo :: Int -> IO ()
demo 1 = rtnNames testData
最后一行demo 1=rtnNames testData出现错误
我试图让rtnNames现在只返回测试数据本身作为第一个障碍

问题是您的签名

demo :: Int -> IO ()
指示演示应返回类型为
IO()
的IO操作。但是,您的实现返回
rtnNames testData
。由于
rtnNames
的实现只返回其参数,因此这相当于只返回
testData
。但这是一个问题,因为
testData
[Place]
,而不是
IO()
。也许你想打印名单?看起来是这样的:

demo 1 = print testData
我希望它会被编译

然而,您的代码存在一些更深层次的设计问题。您正在使用大量的
type
s,这可能比
newtype
s更好
newtype
允许您扩展类型检查器,以确保特定的
[Int]
实际上是一个
RainfallFigures
,而不仅仅是任何旧的数字列表


您的
rtnNames
函数也很重要,因为它什么都不做。一个不做任何事情的函数没有本质上的错误,事实上它是非常有用的,这就是为什么它是开箱即用的<代码>id类型为
a->a
rtnNames
只是
id
的一种特殊化,但从您使用它的上下文来看,我怀疑它不是故意的。

问题是您的签名

demo :: Int -> IO ()
指示演示应返回类型为
IO()
的IO操作。但是,您的实现返回
rtnNames testData
。由于
rtnNames
的实现只返回其参数,因此这相当于只返回
testData
。但这是一个问题,因为
testData
[Place]
,而不是
IO()
。也许你想打印名单?看起来是这样的:

demo 1 = print testData
我希望它会被编译

然而,您的代码存在一些更深层次的设计问题。您正在使用大量的
type
s,这可能比
newtype
s更好
newtype
允许您扩展类型检查器,以确保特定的
[Int]
实际上是一个
RainfallFigures
,而不仅仅是任何旧的数字列表


您的
rtnNames
函数也很重要,因为它什么都不做。一个不做任何事情的函数没有本质上的错误,事实上它是非常有用的,这就是为什么它是开箱即用的<代码>id类型为
a->a
rtnNames
只是
id
的一种专门化,但从您使用它的上下文来看,我怀疑它不是故意的。

rtnNames什么都不做,因为我只是试图让我的程序通过实际运行的第一道障碍。但是谢谢你。我用print(rtnNames-testData)替换了rtnNames-testData,效果很好!当然,作为存根,那很好。仍然会鼓励您查看
newtype
s。让编译器静态地强制执行数据的语义类型,而不仅仅是强制执行内部存储类型,这真是太棒了。rtnNames什么都不做,因为我只是试图让我的程序通过实际运行的第一道障碍。但是谢谢你。我用print(rtnNames-testData)替换了rtnNames-testData,效果很好!当然,作为存根,那很好。仍然会鼓励您查看
newtype
s。让编译器静态地强制执行数据的语义类型,而不仅仅是强制执行内部存储类型,这真是太棒了。