232得票2回答
Haskell中`data`和`newtype`的区别

当我这样写代码时,有什么区别呢?data Book = Book Int Int 对比newtype Book = Book (Int, Int) -- "Book Int Int" is syntactically invalid

36得票3回答
如何在C++中最佳实现“newtype”习语?

自学 Rust 后,我成为了 newtype 惯用语 的粉丝,我认为 Rust 从 Haskell 借鉴了这个惯用语。 新类型是一种基于标准类型的独立类型,它确保函数参数具有正确的类型。例如,下面的 old_enough 函数必须传入年龄。如果传入天数或纯 i64,则无法编译。 struc...

31得票3回答
自动为 Rust 的新类型(只有一个字段的元组结构体)实现封闭类型的特征。

在 Rust 中,只有一个字段的元组结构体可以像下面这样创建:struct Centimeters(i32); 我想对厘米(Centimeters)进行基本的算术计算,而不需要每次都用模式匹配来提取它们的“内部”值,也不需要实现Add、Sub等特性和重载运算符。 我的意图是:let a = C...

18得票5回答
哪些编程语言有类似于Haskell中的`newtype`的功能?

Haskell编程语言有一种“newtypes”概念:如果我写newtype Foo = Foo (Bar),那么将创建一个新类型Foo,它与Bar等同,即两者之间存在双射转换。这个结构的特点是: 这两种类型是完全独立的(即编译器不允许您在期望另一个类型的位置使用一个类型,除非使用显式转换...

18得票2回答
有没有一种方法在GHC Haskell中定义一个存在量化的newtype?

在Haskell的(GHC)中是否有可能定义一个存在量化的新类型?我知道如果涉及到类型类,那么在字典传递实现中是无法做到的,但对于我的目的来说不需要类型类。我真正想定义的是这个: newtype Key t where Key :: t a -> Key t 但 GHC 似乎不喜欢...

17得票2回答
具有RankNTypes的newtype

如果我想声明一个 newtype,以便该值的类型受限于必须具有某个类型类的实例,似乎可以使用以下方法: ```haskell newtype MyType a = MyType {unMyType :: a} deriving (SomeTypeclass) ``` ```ha...

16得票2回答
数据类型和新类型之间的懒惰/严格性

我很难理解为什么这两个片段在所谓的“贫穷人的严格分析”下会产生不同的结果。 第一个示例使用data(假设正确的Applicative实例): data Parser t a = Parser { getParser :: [t] -> Maybe ([t], a) ...

16得票5回答
制作新的类型/数据以增加清晰度是否不好?

我想知道做类似这样的事情是否不合适:data Alignment = LeftAl | CenterAl | RightAl type Delimiter = Char type Width = Int setW :: Width -> Alignment -> Deli...

15得票2回答
C#中有没有类似于Haskell中newtype的东西?

在Haskell中,有两种提供类型别名的方式:type和newtype。 type提供了一个类型同义词,这意味着类型检查器将同义词视为与原始类型完全相同: type UserId = Int hasAccess :: UserId -> Bool hasAccess id = {-- ...

15得票1回答
无法创建Num的派生实例

我正在使用 ghci,这段代码部分 newtype Gold = Gold Int deriving (Eq, Ord, Show, Num) 显示错误为 Can't make a derived instance of 'Num Gold': 'Num' is not a...