bud*_*pet 1 haskell pattern-matching
我有一个如下定义的数据构造函数:
data Stack a = Empty | NonEmpty a (Stack a)
deriving (Show, Read, Eq)
Run Code Online (Sandbox Code Playgroud)
然后我有一个将其与模式匹配一起使用的函数:
func :: Stack a -> a
func (Stack.NonEmpty val Stack.Empty) = ...
func (Stack.NonEmpty val1 (Stack.NonEmpty val2 Stack.Empty)) = ...
Run Code Online (Sandbox Code Playgroud)
我想做的是使用类似序列或列表的操作符进行模式匹配,如下所示:
func :: Stack a -> a
func (val :> Stack.Empty) = ...
func (val1 :> val2 :> Stack.Empty) = ...
Run Code Online (Sandbox Code Playgroud)
我知道它实际上不是一个运算符,而是一个数据构造函数,看起来像一个运算符,但我无法使其工作。
几周前我也开始学习 Haskell。
您可以定义:>为数据构造函数而不是NonEmpty:
data Stack a = Empty | a :> Stack a
deriving (Show, Read, Eq)Run Code Online (Sandbox Code Playgroud)
那么您仍然需要做的唯一一件事就是将其指定为右关联运算符,以便x :> y :> z解析为x :> (y :> z):
data Stack a = Empty | a :> Stack a
deriving (Show, Read, Eq)
infixr 7 :>Run Code Online (Sandbox Code Playgroud)
这是7固定性并确定如果有两个运算符则优先考虑的内容。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |