120得票3回答
Haskell中的派生是如何工作的?

代数数据类型(ADTs)在Haskell中可以通过从一些类型类(如Show,Eq)中进行派生而自动成为它们的实例。data Maybe a = Nothing | Just a deriving (Eq, Ord) 我的问题是,这个 deriving 是如何工作的,也就是说 Hask...

83得票3回答
拉链共函,通用性

对于任何容器类型,我们可以形成(以元素为中心的)Zipper,并知道这个结构是一个Comonad。最近在另一个Stack Overflow问题中详细探讨了以下类型: data Bin a = Branch (Bin a) a (Bin a) | Leaf a deriving Functor...

29得票2回答
如何在Haskell中查看派生实例/推导生成的代码

因此,在Haskell中,做到这一点真的很容易:data Foo = Bar | Baz deriving (Read, Show) 这很好,但我希望能够将一些数据作为字符串从Haskell传递到Elm语言中。这两种语言相似到足以让我手动将Haskell实现的Read函数轻松转换为El...

25得票3回答
Haskell:获取数据构造函数名称作为字符串

假设我们有data D = X Int | Y Int Int | Z String 我希望能有一个名为getDConst的函数。getDConst :: D -> String 根据输入的数据构造函数,返回“X”、“Y”或“Z”之一。有没有通用的方法可以在不必为每个数据构造函数都进行c...

24得票1回答
`DeriveAnyClass`和空实例之间有什么区别?

使用cassava包,以下代码可以编译:{-# LANGUAGE DeriveGeneric #-} import Data.Csv import GHC.Generics data Foo = Foo { foo :: Int } deriving (Generic) instance ...

19得票2回答
所有可微分的类型都是单子吗?

如果给定一个可微类型,我们知道它的Zipper是一个Comonad。对此,丹·伯顿问道:"如果导数生成一个共同子,那么积分是否生成一个单子?还是说这是无意义的?" 我想给这个问题一个具体的含义。如果一个类型是可微的,它是否一定是一个单子?一个表述这个问题的方式是问,在给定以下定义的情况下: ...

18得票3回答
为什么没有`-XDeriveApplicative`扩展?

GHC拥有一些有用的语言扩展,可用于机械化推导出各种常见的Haskell类型类(-XDeriveFunctor,-XDeriveFoldable,-XDeriveTraversable)。似乎Applicative是另一个经常需要且通常很容易派生的类。对于包含类型为a 的简单记录,例如:dat...

17得票2回答
为什么在Haskell中无法推导出Applicative Functors?

在Haskell中,您可以使用"deriving"关键字自动派生 "Functor"、"Foldable"和"Traversable"。但是,无法自动派生" Applicative"。考虑到定义Applicative实例的一个显然的方法(即通过zip应用),难道没有任何方法可以启用" deri...

13得票1回答
我能否在派生的 Show 中将 Haskell GADT 数据构造函数设置为中缀形式?

考虑两个 data 声明:{-# LANGUAGE GADTs #-} data X = Int `Y` Int deriving Show data Z where W :: Int -> Int -> Z deriving Show main = do ...

12得票1回答
使用独立派生的Deriving Via

我不确定我在这里做错了什么:data Vector2D u = Vector2D { _x :: u, _y :: u } deriving stock (Show, Eq, Functor, Foldable, Traversable) {-# INLINE addV...