删除类型构造函数中的参数

问题描述 投票:0回答:1

删除类型构造函数中的参数意味着什么?例如

data Foo : (0 _ : Nat) -> Type where

相对于

data Foo : Nat -> Type where

我的理解是,类型构造函数中的任何内容都不会在运行时使用,因此它实际上始终为 0。我想这也会导致一个可能更令人困惑的问题:线性参数在类型构造函数中意味着什么,但那是另一天的事了.

idris erasure quantitative-types
1个回答
0
投票

Idris (2) 有点不寻常,因为它允许对类型进行直接模式匹配。类型构造函数被视为 作为

Type
的构造函数

finSize : Type -> Maybe Nat
finSize (Fin n) = Just n
finSize _       = Nothing

如果你删除了

Fin
的参数,那么用
Type
匹配
Fin n
也会使
n
被删除。

data Fin : (0 _ : Nat) -> Type where

-- fails
-- finSize : Type -> Maybe Nat
-- finSize (Fin n) = Just n  -- have 0 copies of n, need at least 1
-- finSize _       = Nothing
-- succeeds
data Erased : Type -> Type where Erase : (0 _ : a) -> Erased a
finSize : Type -> Maybe (Erased Nat)
finSize (Fin n) = Just (Erase n)
finSize _       = Nothing
© www.soinside.com 2019 - 2024. All rights reserved.