9得票2回答
Haskell新类型语法

请帮助我理解以下定义: 请帮助我理解以下定义: newtype Writer w a = Writer { runWriter :: (a,w) } instance (Monoid w) => Monad (Writer w) where return a ...

9得票5回答
在`newtype a`上使用`a`的函数

假设我有以下的newtype: newtype Foo = Foo Integer deriving (Eq, Show) 是否有一种简洁的方式来添加两个Foo: (Foo 10) + (Foo 5) == Foo 15 或获取最大值: max (Foo 10) (Foo 5) ==...

9得票1回答
新类型构造器映射的作用是什么?

在类型思维的第8章中,我了解到fmap Sum部分。 fastSum :: [Int] -> Int fastSum = getSum . mconcat . fmap Sum O(n) 运行时开销,而使用 coerce 可以避免这种开销。 我知道 newtype 没有表示开销,...

9得票2回答
无法将“Reader”作为字段使用来强制转换数据类型

我有以下Haskell代码,可以完美编译: import Control.Monad.Reader (Reader (..)) import Data.Coerce (Coercible, coerce) data Flow i o = Flow (i -> o) (o -> ...

8得票1回答
如何在安全的 Rust 中为无大小类型及其拥有者对应类型(例如 `str` 和 `String`)创建新类型?

我想创建一对新类型Tag(str)和TagBuf(String),类似于Path和PathBuf封装了OsStr和OsString的方式。我的最终目标是拥有一个以TagBuf为键的映射,并能够只用一个Tag索引它。 fn main() { let mut m: HashMap<...

8得票1回答
新类型的WHNF是什么,rseq如何在新类型上工作?

由于newtype在编译时被有效地删除,因此它们没有thunk,只有值。那么如果我使用rseq来请求其WHNF,会发生什么?例如,在以下代码中: Sum (lengthyComputation :: Int) `using` rseq 其中Sum被定义为 newtype Sum a =...

8得票3回答
有没有一种简写方式来表示像 `fromNewtype . f . toNewtype` 这样的操作?

每当使用 `newtype` 引入类型安全性时,一种常见的模式是将一个或多个值投影到 `newtype` 包装器中,进行一些操作,然后再收回投影。一个普遍的例子是 `Sum` 和 `Product` 半群: λ x + y = getSum $ Sum x `mappend` Sum y λ...

8得票2回答
为什么需要 WrappedMonad 和 WrappedArrow?

为什么会出现WrappedMonad和WrappedArrow类型?是因为Monad不是Applicative吗?既然有了WrappedArrow,那么是否应该存在这个实例呢? Arrow a => Applicative (Arrow a b) 是否可以将其直接构建到Haske...

8得票1回答
为什么使用 `data` 会导致无限循环,而使用 `newtype` 则不会。

我正在学习 Arrow,遵循教程 使用箭头进行编程。除了 SF 是通过 data 定义而不是像论文中一样通过 newtype 定义(实际上,这个修改是我按照记忆打的代码时偶然发生的),我已经按照论文输入以下代码: import Control.Category import Control....

8得票1回答
Java中的用户定义值类是怎样的?

我认为我能通过与Haskell的newtype进行比较来理解Scala 2.10中新的“value class”功能: trait BoundedValue[+This] extends Any { this: This => def upperBound: This de...