小编Eli*_*ndt的帖子

键入Family作为类型同义词的参数

我有一个看起来像的数据类型

data G f n a where 
  G :: a -> G f n a -> G f (f n) a 
Run Code Online (Sandbox Code Playgroud)

它是一个由自然索引的容器,它采用一种函数来确定如何进行归纳.

我可以很容易地定义类型同义词

type G' n a = G S n a
Run Code Online (Sandbox Code Playgroud)

但我希望能够使用身份功能.

我尝试使用Data.Functor.Identity,但即使用PolyKinds重新定义,我也无法在Naturals(:k Identity => Nat -> Nat)上获得类型级函数,所以我转向类型族,定义

type family Id a where 
  Id a = a 
Run Code Online (Sandbox Code Playgroud)

哪个,很酷,它编译.不幸的是,我提供type G'' n a = G Id n a并且我收到了错误消息

The type family ‘Id’ should have 1 argument, but has been given none
In the type synonym declaration for …
Run Code Online (Sandbox Code Playgroud)

haskell type-families dependent-type

8
推荐指数
1
解决办法
197
查看次数

在Haskell中避免使用++

CodeReview的答案中,提问者和回答者似乎都对(++)运算符表示不屑.这是由于它的速度(导致算法明确地在O(n ^ 2)中运行,其中n是列表的长度iirc)?如果不进行其他测试,这是否是预优化,因为Haskell因难以推断时间复杂性而闻名?其他人是否应该避免程序中的(++)运算符?

haskell operators

5
推荐指数
1
解决办法
351
查看次数

Abs和minBound

在玩各种情况的minBound时,我试过了

> minBound :: Int
=> -9223372036854775808
Run Code Online (Sandbox Code Playgroud)

这看似合理.

然而,

> abs minBound :: Int 
=> -9223372036854775808
Run Code Online (Sandbox Code Playgroud)

这怎么可能?不应该abs x >= 0,假设x :: Int

我在这里缺少对语义的某种理解吗?

math haskell

3
推荐指数
1
解决办法
76
查看次数

标签 统计

haskell ×3

dependent-type ×1

math ×1

operators ×1

type-families ×1