相关疑难解决方法(0)

GADT可以用来证明GHC中的类型不等式吗?

因此,在我不断尝试通过小型Haskell练习半理解Curry-Howard时,我已经陷入了困境:

{-# LANGUAGE GADTs #-}

import Data.Void

type Not a = a -> Void

-- | The type of type equality proofs, which can only be instantiated if a = b.
data Equal a b where
    Refl :: Equal a a

-- | Derive a contradiction from a putative proof of @Equal Int Char@.
intIsNotChar :: Not (Equal Int Char)
intIsNotChar intIsChar = ???
Run Code Online (Sandbox Code Playgroud)

很明显,这种类型Equal Int Char没有(非底层)居民,因此在语义上应该有一个absurdEquality :: Equal Int Char -> a功能......但对于我的生活,我无法想出任何方式来编写除了使用之外的其他方法undefined.

所以要么: …

haskell curry-howard

22
推荐指数
2
解决办法
990
查看次数

是否可以为涉及类型族的此数据类型编写fmap?

鉴于以下类型族(应该反映同构A×1≅A)

type family P (x :: *) (a :: *) :: * where
  P x () = x
  P x a  = (x, a)
Run Code Online (Sandbox Code Playgroud)

和以其方式定义的数据类型

data T a = T Integer (P (T a) a)
Run Code Online (Sandbox Code Playgroud)

是否有可能通过某种类型的hackery Functor为后者编写实例?

instance Functor T where
  fmap f = undefined  -- ??
Run Code Online (Sandbox Code Playgroud)

直觉上,根据类型显而易见,该怎么做f,但我不知道如何在Haskell中表达它.

haskell ghc type-families

12
推荐指数
1
解决办法
198
查看次数

标签 统计

haskell ×2

curry-howard ×1

ghc ×1

type-families ×1