8得票3回答
双向功能依赖

我有一个类型类,看起来像以下的代码: class Foo a b | a -> b where f :: a -> Bool g :: b -> Bool h :: a -> b -> Bool 至少这些是我问题所关心的重点。这个类无法编译,原因...

8得票2回答
GHC 7.8 中类型级自然数的行为

如果您想按长度对向量进行索引,可以这样做: {-# LANGUAGE DataKinds, GADTs, TypeOperators, TypeFamilies, StandaloneDeriving #-} data N = P N | Z type family Add ...

8得票2回答
将形如F[T1] :: ... :: F[Tn] :: HNil的Map Shapeless hlist类型转换为T1 :: ... :: Tn :: HNil类型(类型级别排序)。

我正在编写一个通用函数,它会接收一个类似于F[T1] :: ... :: F[Tn] :: HNil的HList,将其转换为F[T1 :: ... :: Tn :: HNil]并传递到一个传入的代码块中。然而,为了使其正常工作,我需要在F[_]中提取HList类型。我在Shapeless的hl...

8得票1回答
Haskell中异构列表的类型安全查找

我希望为以下数据类型开发一个类型安全的查找函数: data Attr (xs :: [(Symbol,*)]) where Nil :: Attr '[] (:*) :: KnownSymbol s => (Proxy s, t) -> Attr xs -> ...

8得票1回答
这个Haskell语法是什么(类型级运算符?)

在Haskell代码中,'[]'表示空列表,“:”则表示将元素添加到列表的头部。以下是一些示例 - 示例1:(来源:链接) data OrderPacket replies where NoOrders :: OrderPacket '[] Example 2: data E...

8得票2回答
在Haskell中,'[]和':'是什么?

我曾在几个地方见到过'[]和':'的语法,最显著的是在异构列表包中,如HList或HVect。 例如,异构向量HVect的定义如下: data HVect (ts :: [*]) where HNil :: HVect '[] (:&:) :: !t -> !...

7得票1回答
折叠一个异构、编译期的列表

我有一个类型不同的列表(至少我是这么想的): data Nul data Bits b otherBits where BitsLst :: b -> otherBits -> Bits b otherBits NoMoreBits :: Bits b Nu...

7得票1回答
如何将依赖大小的数组推广到n维?

我已经试验了一段时间,但是我无法说服 GHC 让这个工作起来。 基本上,在当前版本的 Haskell/GHC 中创建依赖大小的数组非常容易: newtype Arr1 (w :: Nat) a = Arr1 (Int -> a) newtype Arr2 (w :: Nat) (h ...

7得票1回答
如何创建具有任意长度的向量?:Haskell

希望在Haskell中实现类型安全的矩阵乘法。 定义如下: {-# LANGUAGE TypeFamilies, DataKinds, GADTs #-} module Vector where data Nat = Succ Nat | Zero data Vector (n :: ...

7得票3回答
如何在TypeScript中编写`Invert`类型以反转元组顺序

type a = [1,2,3] type Invert<T extends any[] & {'0': any}> = ??? type b = Invert<a> // should yield [3,2,1] 我被卡在了想要理解元组的 Invert 类...