gpt4 book ai didi

haskell - Haskell 有善统一吗?

转载 作者:行者123 更新时间:2023-12-03 22:18:07 25 4
gpt4 key购买 nike

我正在研究单例类型可以在多大程度上模拟依赖类型,我遇到了一个问题。我复制错误的最小代码:

{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeInType #-}

import Data.Kind(Type)

data SBool :: Bool -> Type where
STrue :: SBool 'True
SFalse :: SBool 'False

data SSBool :: SBool b -> Type where
SSFalse :: SSBool 'SFalse
SSTrue :: SSBool 'STrue

错误信息是:

Expected kind ‘SBool b’, but ‘'SFalse’ has kind ‘SBool 'False’

最佳答案

你需要明确依赖关系。以下使用 GHC 8.0.1 编译。

import Data.Kind(Type)

data SBool :: Bool -> Type where
STrue :: SBool 'True
SFalse :: SBool 'False

data SSBool :: forall (b :: Bool) . SBool b -> Type where
SSFalse :: SSBool 'SFalse
SSTrue :: SSBool 'STrue

老实说,我对此感到惊讶。我根本不知道这种类型的依赖是被允许的。

请注意,这与 Coq 没有什么不同,其中

Inductive SSBool (b: bool) : SBool b -> Type :=
| SSFalse : SSBool SFalse
| SSTrue : SSBool STrue
.

编译失败,而

Inductive SSBool : forall (b: bool), SBool b -> Type :=
| SSFalse : SSBool false SFalse
| SSTrue : SSBool true STrue
.

编译。

关于haskell - Haskell 有善统一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com