data-kinds

    6热度

    1回答

    我试图创建一个类型来保证字符串的长度小于N个字符。 {-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DataKinds #-} import GHC.TypeLits (Symbol, Nat, Know

    8热度

    1回答

    尝试在具有类型级别列表的GADT上基于 定义模式同义词时出现错误。 我设法熬下来到这个例子: {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE PatternSynonyms #-} mo

    1热度

    1回答

    我最近开始与DataKinds搞混了,以便有编译时的科学单位进行算术运算。我或多或少地想出了一种做我想做的事情的方式,但我觉得它可能会更清洁。 我需要可能是负数的整数(m^-1),所以我决定使用整数而不是自然数。但事实证明,当你做:k 5它给你GHC.Types.Nat这不符合我的需要。我结束了,而不是做自己的自定义代数整数类型。以及定义加法和减法类型族使用它。 但是,这一切似乎都是非常间接的,似

    3热度

    1回答

    我想要做一些高级的类型级编程;这个例子是我的原始程序的简化版本。 我有(Haskell)类型的表示形式。在这个例子中,我只涉及函数类型,基本类型和类型变量。 表示Type t由一个类型变量t参数化,以允许区分类型级别。为了达到这个目标,我主要使用GADT。不同的类型和类型变量通过使用类型级文字来区分,因此KnownSymbol约束和使用Proxy s。 {-# LANGUAGE GADTs, Ty

    3热度

    1回答

    是否可以指定数据库的每个成员满足类型类型,从而隐含类约束?例如。 data AB = A | B class Foo (a :: AB) where get :: proxy a -> String instance Foo A where get _ = "A" instance Foo B where get _ = "B" -- note lack of constraint he

    4热度

    2回答

    我对Haskell比较新,我想了解HList的定义之一。 data instance HList '[] = HNil newtype instance HList (x ': xs) = HCons1 (x, HList xs) pattern HCons x xs = HCons1 (x, xs) 我有几个具体的问题: 什么是'[]和(x ': xs)语法我看到?它几乎看起来像是在可变

    4热度

    1回答

    我想在Haskell中使用GADT的类型安全的实现张量计算的,所以规则是: 张量正维metrices与可以是'楼上'或'楼下'的indecies,例如: - 是一个没有indecies(一个标量)的张量,是一个带有'楼上'索引的张量,是一张张'楼上'和'楼下'indecies 您可以添加相同类型的张量,这意味着它们具有相同的indecies签名。第一张量的第0指数是相同的类型(楼上或楼下)作为第二

    2热度

    2回答

    我试图使用DataKinds来做类型级别的编程,但当我有嵌套在另一个这些结构之一时遇到困难。 {-# LANGUAGE DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses, FlexibleInstances #-} module Temp where data Prop1 = D | E data Lower :: Prop1

    0热度

    1回答

    我一直在努力在Haskell中构建我自己的Diplomacy模拟器来让我的脚湿润。 我相信我已经拿出一个像样的定义的顺序是什么: data Order = Hold Unit Territory | Move Unit Territory Territory | Support Unit Territory Unit Territory Territory

    12热度

    1回答

    DataKinds扩展将“值”(即构造函数)提升为类型。例如True和False成为不同类型的种类Bool。 我想要做的是相反的,即降低数值类型。与此签名的函数就可以了: demote :: Proxy (a :: t) -> t 其实我可以做到这一点,例如用于Bool: class DemoteBool (a :: Bool) where demoteBool :: Proxy (