Haskell数据类型无法识别

时间:2016-12-14 11:33:06

标签: haskell types

我收到了这段代码:

<?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。我不明白为什么这不起作用?

1 个答案:

答案 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)