15得票2回答
Haskell带括号的newtype

我试图理解Monads made difficult中的说明,但是我很难弄清楚以下newtype定义:newtype (FComp g f) x = FComp { unCompose :: g (f x) } instance (Functor b c f, Functor a b g) ...

11得票1回答
Haskell:使用Map.empty时出现“绑定位置的限定名称”错误

我正在尝试为一个有空map的newtype创建一个pattern synonym。{-# Language PatternSynonyms #-} import qualified Data.Map as Map newtype StoreEnv = StoreEnv (Map.Map I...

11得票2回答
未加包装类型的限制

我想知道为什么Haskell中的未装箱类型有这些限制: 您不能为未装箱类型定义新类型:newtype Vec = Vec (# Float#, Float# #) 但是您可以定义类型同义词:type Vec = (# Float#, Float# #) 类型族无法返回未经包装的类型:ty...

11得票1回答
在Haskell中,多个类型变量的顺序规则是什么?

例如,ParsecT在其定义中有多个类型变量。newtype ParsecT s u m a = ParsecT {unParser :: forall b . State s u -> (a -> State ...

10得票2回答
使用元组伪造的多参数newtype?

这是一个让我困扰了一段时间的愚蠢问题。为什么我不能使用多个参数编写 newtype?newtype A = A Int Int 那元组版本就可以了吗?newtype A = A (Int, Int) 就像模式匹配等方面,前者更加优美。

10得票2回答
为什么在引用newtype包装的数字类型时可以省略构造函数?

在《实际 Haskell》的第321页上, 有这些代码, ... {-# LANGUAGE GeneralizedNewtypeDeriving #-} newtype AInt = A { unA::Int } deriving (Show, Eq, Num) instanc...

10得票1回答
Haskell的新类型,可以颠倒或翻转顺序。

可能已经存在一种newtype,可以翻转Ord、Bounded等的意义。大概是这样的: newtype FlipOrd a = FlipOrd {unFlip :: a} deriving (Eq) instance (Ord a) => Ord (FlipOrd a) where ...

10得票1回答
整理单子 - 将单子变换器的应用转化为新类型单子。

我想将类似于 ExceptT a (StateT A M) 的东西,对于某个具体类型 A 和 monad M,封装成我的新自定义 monad。 首先我确定 StateT A M 在其他情况下经常出现,因此我决定最好单独用一个 monad M1 将其封装起来,然后再将 ExceptT a M1...

9得票2回答
更加通用的newtype派生

新类型经常用于在特定类上下文中改变某些类型的行为。例如,当作为 Monoid 使用时,可以使用 Data.Monoid.All 包装器来改变 Bool 的行为。 我目前正在编写这样一个新类型包装器,它将适用于大量不同的类型。该包装器旨在改变一个特定类实例的行为。它可能看起来像这样: new...

9得票1回答
通用化新类型导出

下面的代码中,Haskell可以为T1推导出MonadState s实例,但无法为非常相似的类型T2推导。我应该如何修改T2的代码,以便可以自动推导出MonadState s实例? {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Con...