我收到了这段代码:
<?php
$connect = mysqli_connect("localhost", "root", "root", "database");
global $connect;
if(isset($_GET['dept']))
{
$dept = $_GET['dept'];
$sql = "SELECT * FROM table WHERE dept='$dept'";
$get = mysqli_query($connect, $sql);
$result = array();
while($row = mysqli_fetch_array($get)){
array_push($result, array(
'user_id' => $row['user_id'],
'dept' => $row['dept']
));
}
echo json_encode(array('result' => $result));
mysqli_close($connect);
}
?>
当我尝试编译时,它说机器的签名是错误的。它说它是[(a,Int)] - &gt; b - &gt;机器a b,而不是[(a,Int)] - &gt; b - &gt;站a b。但在我的数据类型中,我说Station a b = Machine a b。我不明白为什么这不起作用?
答案 0 :(得分:4)
你有两件名为Machine
的东西。一个是返回Station
类型的类型构造函数,另一个是类型。这两者是无关的,即使它们具有相同的名称。
通过向数据构造函数添加'
(素数)来消除两个术语的歧义可能会有所帮助。在这样做时,我们可以绑定Machine'
数据构造函数以保持Machine
作为其唯一参数:
data Station a b = Machine' (Machine a b)
| Line [Station a b]
deriving(Show)
现在我们可以更新machine
函数以使用新定义的构造函数:
machine :: [(a, Int)] -> b -> Station a b
machine l b = Machine' (Req l b)