-
6 votesanswersviews
修改不可变的子结构
假设我有一个不可变的包装器: template<class T> struct immut { T const& get() const {return *state;} immut modify( std::function<T(T)> f ) const { return immut{f(*state)}; } immut(T in):state(s... -
267 votesanswersviews
滥用代数数据类型的代数 - 为什么这有效?
代数数据类型的“代数”表达式对于具有数学背景的人来说非常具有启发性 . 让我试着解释一下我的意思 . 定义了基本类型 产品 • 联盟 + Singleton X 单位 1 并使用 X² 用于 X•X 和 2X 用于 X+X 等等,然后我们可以定义代数表达式,例如链表 data List a = Nil | Cons a (List a) ↔ L = 1 + X • L 和二叉... -
12 votesanswersviews
Kotlin中的代数数据类型
我试图弄清楚如何在Kotlin中使用代数数据类型,所以我试图通过以下方式实现基本的BinaryTree类型 . sealed class Tree<T>{ class Node<T>(val left: Tree<T>, val right: Tree<T>): Tree<T>() class Leaf<T>(val ... -
3 votesanswersviews
为F#中受歧视的联合自动生成谓词和访问器
在F#中是否可以以类型安全的方式自动生成任意代数数据类型的谓词和访问器? 例如,如果我们有用户定义的类型: type A = B of string | C of int * sting 应该生成这样的东西: type A = B of string | C of int * sting with member __.isB = mat... -
20 votesanswersviews
H#中的代数数据类型是否在F#中具有相同的区分联合?
我正在学习Haskell,并想知道Haskell中已知的代数数据类型是否与F#中的区分联合相同,或者它们之间存在一些细微差别 . 我还非常感谢F#(我的第一个函数式语言)与其他函数式语言之间的良好比较,特别是在类似概念方面,但具有实质性但重要的差异 . -
13 votesanswersviews
代数型数据构造函数的“模式匹配”
让我们考虑一个包含许多构造函数的数据类型: data T = Alpha Int | Beta Int | Gamma Int Int | Delta Int 我想编写一个函数来检查是否使用相同的构造函数生成了两个值: sameK (Alpha _) (Alpha _) = True sameK (Beta _) (Beta _) = True sameK (Gamma _ _) (Gamma ... -
0 votesanswersviews
广义ADT和抽象类型上的模式匹配无法编译
我在scala中发现了一些奇怪的东西,我可以't quite explain. I'得到一个广义代数数据类型( DbType ),一个特征 FieldAdapter ,抽象类型为U,成员 dbType 类型为 DbType[U] . 由于一些模糊的原因,我无法在成员 dbType 上进行模式匹配,因为编译器会出现以下错误: Pattern type incompatible, found Str...