小编gsp*_*les的帖子

Haskell:具有幻像变量的数据的异构列表

我正在学习存在量化,幻像类型和GADT.如何使用幻像变量创建数据类型的异构列表?例如:

{-# LANGUAGE GADTs #-}
{-# LANGUAGE ExistentialQuantification #-}

data Toy a where
  TBool :: Bool -> Toy Bool
  TInt  :: Int  -> Toy Int

instance Show (Toy a) where
  show (TBool b) = "TBool " ++ show b
  show (TInt  i) = "TInt "  ++ show i

bools :: [Toy Bool]
bools = [TBool False, TBool True]

ints  :: [Toy Int]
ints  = map TInt [0..9]
Run Code Online (Sandbox Code Playgroud)

具有以下功能可以:

isBool :: Toy a -> Bool
isBool (TBool _) = True
isBool …
Run Code Online (Sandbox Code Playgroud)

haskell existential-type gadt phantom-types

10
推荐指数
3
解决办法
688
查看次数

约束类型在哪里定义?

我不熟悉GHC内部,但我有几个关于ConstraintKinds的问题.

它从那GHC.Exts说起

data Constraint :: BOX
Run Code Online (Sandbox Code Playgroud)

这是Constraint一种误导,因为它是一种排序BOX.这给我们带来了第一个问题:我们可以进口和出口种类吗?这是如何运作的?

如果我完全离开,请在下一部分纠正我.从尝试不同的进口和对hackage源扫视四周,我的猜测是,GHC.Exts进口ConstraintGHC.Base,谁反过来,进口它GHC.Prim.但是我没看到它的定义在GHC.Prim哪里?

haskell ghc constraint-kinds

4
推荐指数
1
解决办法
726
查看次数

Haskell - 多态性和值取决于类型

通过阅读lambda 立方体和此线程的维基百科条目,当应用于 Haskell 时,我的理解是

\n\n
    \n
  1. 按术语索引的术语族 - 从值到值的典型函数
  2. \n
  3. 按类型索引的术语族 - ??
  4. \n
  5. 按类型索引的类型族 - 类型构造函数、类型族中的参数多态性
  6. \n
  7. 按术语索引的类型系列 - pi 类型(在 Haskell 中使用单例类型进行伪造)、sigma 类型等...
  8. \n
\n\n

如果我上面列出的示例有误,请纠正我。引用维基百科的那篇文章:

\n\n
\n
    \n
  • 术语取决于类型或多态性。系统 F,又名二阶 lambda 演算(图中写为 \xce\xbb2),是通过仅施加此属性获得的。
  • \n
\n
\n\n

我不知道 Haskell 如何适应上面的(2)。Haskell 在术语和类型以及类型擦除之间有很强的区别,因此 OOP 中没有反射的东西,例如typeof(a)b.GetType(),然后在运行时根据类型信息返回一些值。

\n\n

所以我在 Haskell 中唯一能想到的与 (2) 有关的可能是

\n\n
    \n
  • 比如说memptyin 中的返回类型多态性Data.Monoid,其中值取决于实例类型
  • \n
  • 在左侧接受类型并在右侧具有值构造函数的数据族
  • \n
\n\n

那是正确的吗?虽然我觉得我没有建立所有联系......

\n\n

说特设多态性满足 (2) 而参数多态性满足 (3) 是否正确?但是,临时与参数与类型与数据系列的 RHS 差异有何关系? …

polymorphism haskell lambda-calculus type-families

4
推荐指数
1
解决办法
527
查看次数