28得票5回答
Haskell字节串:如何进行模式匹配?

我是Haskell的新手,对于如何匹配ByteString有一些困惑。我的函数的[Char]版本如下: dropAB :: String -> String dropAB [] = [] dropAB (x:[]) = x:[] dropAB (x:y:xs) = if...

17得票1回答
模式同义词导致模式匹配不完整。

我已经成功地构建了下面这个“最小化”的示例,展示了我的问题。 只要启用PatternSynonyms扩展功能即可。data Vec = Vec Int Int pattern Ve x y = Vec x y f :: (Vec, Vec) -> Vec f (v@(Ve a b)...

12得票2回答
类似于列表的模式匹配Data.Sequence

我正在使用Data.Sequence代替列表以获得更好的性能。 使用列表,我们可以执行以下操作:foo :: [Int] -> Int foo [] m = m foo (x:xs) m = ... 如何使用 Data.Sequence 完成这个任务。我尝试了以下方法:foo:: S.S...

12得票1回答
一个"Nil"携带值的列表?

有没有一些标准的 Haskell 库定义了这样一个数据类型data ListWithEnd e a = Cons a (ListWithEnd e a) | End e 这是一个列表,其终止元素携带有指定类型的值? 因此,ListWithEnd()同...

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回答
在私有数据构造函数上进行模式匹配

我正在编写一个简单的用于网格轴的ADT。在我的应用程序中,网格可能是规则的(坐标之间的间隔是固定的),也可能是不规则的。当然,规则的网格只是不规则网格的一种特殊情况,但在某些情况下区分它们可能是有意义的(例如,进行一些优化)。因此,我将我的ADT声明为以下内容: data GridAxis ...

10得票1回答
组合模式

考虑以下数据类型和模式同义词:{-# LANGUAGE PatternSynonyms, NamedFieldPuns #-} data Foo = Foo { a :: Int , b :: String , c :: Maybe Bool } pattern...

8得票1回答
模式同义词无法在类型级别列表中统一类型

我在尝试基于一个类型级列表的GADT定义模式同义词时出现了错误。 我已经将其简化为以下示例: {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE Typ...

8得票1回答
为什么我的模式在两侧都阻止了错误?

首先,我正在使用以下定义的模式同义词: {-# Language PatternSynonyms #-} pattern x := y <- x @ y 这使我能够同时运行参数中的多个模式匹配。常规绑定(@)不允许左侧是模式,但这个可以。 有了这个,我就可以创建以下的玩具函数:...

7得票1回答
为一个多态模式同义词编写完整的Pragma?

我有以下代码,但我不知道应该在 ?? 处输入什么内容。或者说多态模式无法完整吗? {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ViewPatterns #-} module Data.Tuple.Single.Class ( Sin...