为什么Idris中的依赖类型不能处理这种情况?

时间:2017-04-17 19:08:43

标签: idris

我想做以下事情:

data Foo : (a : Type) -> (b : Type) -> (c : a -> b -> Type) -> Type where
  Bar : a -> (c a) -> Foo a b c

但是我收到以下错误:

When checking type of test.Bar:
When checking argument c to test.Foo:
    Type mismatch between
            Type -> Type (Type of c)
    and
            a -> b -> Type (Expected type)

    Specifically:
            Type mismatch between
                    Type
            and
                    b -> Type

这似乎对我有用。 c表达式Foo a b c中的b -> Type类型正确,但Idris认为它的类型为(c a),或者我认为是libxml_use_internal_errors(true); $doc = simplexml_load_file($file_name); $errors = libxml_get_errors(); echo "<pre>" . print_r($errors,true) . "</pre>"; libxml_clear_errors();

我错过了什么,或者这是伊德里斯的限制?

1 个答案:

答案 0 :(得分:3)

(c a)的类型为b -> Type,而数据构造函数的所有字段都必须包含Type类型。正如伊德里斯所说,这是一个错误。您的c类型构造函数有两个参数,但您只将其应用于单个a