haskell - 我可以从模式同义词中捕获值吗?

标签 haskell pattern-matching pattern-synonyms

假设一个模式:

pattern P :: [Int]
pattern P <- a:_

我可以以某种方式在函数f中使用a吗?

f :: [Int] -> Int
f P = a

上面的代码产生Not in scope: 'a'的错误。

最佳答案

好吧,这有点尴尬,但我发现这样做很有效:

{-# LANGUAGE PatternSynonyms #-}

pattern P :: Int -> [Int]
pattern P a <- a:_

f :: [Int] -> Int
f (P b) = b

main = print $ f [42]

这里的关键点是模式参数变得显式,但随后它也作为将被匹配的 b 模式1 传递。我错过了这一难题。

缺点是显然你需要枚举你想使用的模式的所有部分。


1当然这个还是可以叫a的,我只是换个名字来说明一下。

关于haskell - 我可以从模式同义词中捕获值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520272/

相关文章:

haskell - 'yesod devel' 期间构建失败

haskell - 一些带有 Church 数字的操作的类型签名声明

scala - 模式匹配 "return"值

haskell - 导出类型构造函数有什么不同吗?

python - 使用 linux 或 python 从文件中提取特定的列和字符串

python - 如何判断一个字符串是否在 Python 中重复?

haskell - 如何从 Test.QuickCheck 显式导入 'Fn' 模式?

nlp - 如何在 NLP 中找到相似的名词短语?

haskell - 为什么所有递归模式同义词都被拒绝?

haskell - 如何用 Haskell 向量编写并行代码?