21得票1回答
结构元组的性能表现

以下的F#程序定义了一个函数,该函数返回以结构元组表示的两个整数对中较小的那个,并且运行需要1.4秒:let [<EntryPoint>] main _ = let min a b : int = if a < b then a else b let min (str...

18得票3回答
Haskell的构造函数(data constructors)构造什么?

Haskell可以使用类型构造器和数据构造器构建代数数据类型。例如,data Circle = Circle Float Float Float 我们被告知这个数据构造器(右侧的圆)是一个函数,当给定数据(例如x、y和半径)时可以构造一个圆。 Circle :: Float -> Fl...

10得票6回答
如何在TypeScript中模拟ADT和模式匹配?

很遗憾,截至0.9.5版,TypeScript还没有代数数据类型(联合类型)和模式匹配(用于解构它们)。更糟糕的是,它甚至不支持接口的 instanceof。您使用哪种模式来模拟这些语言特性,以实现最大的类型安全性和最小的样板代码?

8得票1回答
理解Haskell的类型系统有困难

我目前正在尝试完成20个中级Haskell练习。我已经完成了前三个练习(但这是因为furry == fmap,并且Learn You a Haskell已经提供了这些实现)。我目前卡在一个实例上,它说: instance Fluffy (EitherLeft t) where ...

14得票1回答
如何将解包严格字段与多态性结合起来?

{-# UNPACK #-} pragma会告诉编译器消除冗余构造函数。引用自Haskell wiki: For example, given this: data T = T {-# UNPACK #-} !(Int,Float) GHC will represent the ...

17得票3回答
`'a.` and `type a.`之间有什么区别?何时使用每个?

OCaml有几种不同的语法用于多态类型注释: let f : 'a -> 'a = … (* Isn’t this one already polymorphic? (answer: NO) *) let f : 'a. 'a -> 'a = … let ...

16得票1回答
代数数据类型(ADT)是什么?

我听说过很多人在谈论函数式编程中的代数数据类型(不要与“抽象数据类型”混淆)。我知道的是ADT指的是某种组合类型(通常是递归的),例如树或数学表达式。 在维基百科上,它只说: 代数数据类型是一种组合类型,即通过组合其他类型而形成的类型。两种常见的代数类型类别是乘积类型(即元组和记录)...

11得票1回答
在Rust中使用枚举中已存在的类型

假设我有两个结构体:struct BlankDoc { width: u32, height: u32 } struct UrlDoc<'a> { url: &str<'a> } 有没有一种方法可以使用枚举来创建一个Doc类型,该类型将...

9得票2回答
Haskell 数据类型别名命名

我在Haskell中编写了一个数学向量模块。 我的起始代码如下: data Vector a = Vector !a !a !a deriving (Eq, Show) 好的,这让我可以使用任何数字数据类型。问题是,我不想为了一个简单的原因到处写Double和Vector Double...

15得票2回答
在Haskell中重载(==)

我有以下代数数据类型:data Exp = Con Int | Var String | Op Opkind Exp Exp | Input deriving (Show,Eq) data Opkind = Plus | Minus | Mult | Div | Mo...