newtype相关内容

Haskell中`data`和`newtype`的区别

我写这个有什么不同? data Book = Book Int Int 对比 newtype Book = Book (Int, Int) -- "Book Int Int" 在语法上无效 解决方案 好问题! 有几个主要区别. 代表 newtype 保证您的数据在运行时具有与您包装的类型完全相同的表示. 虽然 data 在运行时声明了一个全新的数据结构. 所以这 ..
发布时间:2021-12-14 11:38:53 其他开发

为什么新类型不使用内部类型的特征?

在 rust 1.0.0-nightly 中,这段代码可以正常工作: fn main() {让 x = 10f64;让 y = 20f64;让 z = x + y;println!("z = {}", z);} 但是如果我尝试使用 newtype(根据 锈书): struct Metres(f64);fn 主(){让 x = 米(10f64);让 y = 米(20f64);让 z = x + ..
发布时间:2021-07-13 20:57:16 其他开发

自动实现 Rust 新类型的封闭类型特征(具有一个字段的元组结构)

在 Rust 中,可以像下面这样创建只有一个字段的元组结构: struct 厘米(i32); 我想用 Centimeters 做基本的算术运算,而不用每次都通过模式匹配提取它们的“内部"值,也不需要实现 Add, Sub, ... trait 和重载运算符. 我想做的是: let a = 厘米(100);让 b = 厘米(200);assert_eq!(a + a, b); 解决方案 ..
发布时间:2021-07-13 20:15:07 其他开发

如何将借用值包装在也是借用值的 newtype 中?

我正在尝试使用 newtype 模式 包装一个预先存在的类型.该内部类型有一个 modify 方法,它允许我们在回调中使用借用的可变值: struct Val;结构内部(Val);impl 内部 {fn modify(&self, f: F)其中 F: FnOnce(&mut Val) ->&mut Val { ... }} 现在我想在我的 newtype Outer 上提供一个非常相似的方法 ..
发布时间:2021-07-05 20:44:33 其他开发

可以在新类型定义中使用类型类约束吗?

假设我们具有以下newtype定义: newtype A = A { _run :: Monad m => A -> [Int] -> m Int } 这不能与GHC 8.0.2一起编译: error: Not in scope: type variable ‘m’ 用像IO或[]这样的具体类型类替换m确实可以编译,就像我期望的那样.既然可以,为什么GHC不允许上述签名?在此n ..
发布时间:2020-11-22 08:05:04 其他开发

新类型的Haskell Monoid实例问题

我正在尝试定义一个实例: newtype Join a = Join { getJoin :: a -> Bool } deriving Generic instance Monoid (Join a) where f g = ??? mempty = ??? 目标是,如果列表中的所有函数均为true,则foldMap Join函数应返回True,否则,则返回f ..
发布时间:2020-11-22 07:41:10 其他开发

本地提升Monad Reader

import Control.Monad.Reader import Control.Monad.State import Control.Monad.Error data Context data Memory data Functions data InterpreterM a = ExeInterpreter a | PropInterpreter a newtype Interpr ..
发布时间:2020-11-22 07:32:53 其他开发

镜头:变焦新型

我有兴趣为我的monad变压器堆栈获取 zooming 功能,该功能的定义如下: newtype Awesome a = Awesome (StateT AwesomeState (ExceptT B.ByteString IO) a) deriving (Functor, Applicative, Monad , MonadIO, MonadError B.Byt ..
发布时间:2020-11-22 07:24:33 其他开发

是否有类似`fromNewtype之类的操作的简写形式. F . toNewtype`?

通过newtype引入类型安全性越高的模式越多地出现,那就是将值(或多个值)投射到newtype包装器中,执行一些操作,然后缩回投影.一个普遍存在的例子是Sum和Product mono半群的例子: λ x + y = getSum $ Sum x `mappend` Sum y λ 1 + 2 3 我想像withSum,withSum2等功能的集合可能会针对每个newtype自动推出. ..
发布时间:2020-11-22 07:15:58 其他开发

使用基于整数Haskell的新类型执行代数

我在执行简单的加减运算时遇到了麻烦-真正具有Haskells newtype的任何代数. 我的定义是(包括显示,因此我可以将它们打印到控制台): newtype Money = Money Integer deriving Show 我想做的基本上是: Money 15 + Money 5 = Money 20 Money 15 - Money 5 = Money 10 Mo ..
发布时间:2020-11-22 06:25:07 其他开发

广义新类型派生

Haskell可以在下面的T1中派生MonadState s的实例,但不能在T2中派生该实例,这是非常相似的类型.我应该以哪种方式修改T2的代码,以便可以自动派生MonadState s的实例? {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Monad.Reader import Control.Monad.State ..
发布时间:2020-05-10 21:47:26 其他开发

什么是C#等同于Haskell的新类型?

在Haskell中,有两种为类型提供别名的方法: type 和 newtype 。 type 提供了一个类型同义词,这意味着类型检查器将同义词视为与原始类型完全相同: type UserId = Int hasAccess :: UserId - > Bool hasAccess id = { - stuff - } - 程序中的其他地方 login :: Int ..
发布时间:2018-06-04 17:29:41 C#/.NET

更广泛的新型派生

Newtypes通常用于在某些类上下文中改变某些类型的行为。例如,使用 Data.Monoid.All 包装器来更改 Bool 在用作 Monoid 。 我目前正在编写这样一种适用于大范围不同类型的新类型包装器。包装应该改变一个特定类实例的行为。它可能看起来像这样: newtype包装器a =包装器a 实例Special a => Special(Wrapper a)其中 ..
发布时间:2018-06-04 17:14:10 其他开发

F#有Haskell的“新类型”吗?

新图书馆: XParsec 这个问题已经导致F#3.0中一个与流类型无关的parsec实现 - 受FParsec启发,从CharStreams中解放出来并简化为: http://corsis.github.com/XParsec/ 在FParsec-inspired stream-类型无关的简单parsec实现,我想知道如何在类型级别区分以下内容: 消耗一段流的解析器 解析器在 ..
发布时间:2018-06-04 16:01:57 其他开发

整理Monads - 将monad变换器的应用转变为新型monad

我正在尝试如 ExceptT(StateT AM),对于某些具体类型 A 和monad M ,并将它们包装到我的新自定义monads中。 首先我确定出现 StateT AM 通常在其他上下文中,因此我决定最好将它单独包装在单元 M1 中,然后包装 ExceptT a M1 到 M2 。 所需的属性是使 M1 和 M2 MonadState 的实例和 M MyMonadClass )。 ..
发布时间:2018-06-04 15:26:51 其他开发