在我的旅行过程中,我写了这个模式同义词:
pattern ConsK :: a -> D k (StreamK k a) -> StreamK k a
pattern ConsK x xs <- StreamK (Cons x ((UnsafeD . StreamK) -> xs)) where
ConsK x (UnsafeD (StreamK xs)) = StreamK (Cons x xs)
最后一行捕获此模式同义词的意图:虚拟构造函数ConsK
包装(使用StreamK
)并解包(xs
)其参数。当我在这个构造函数上进行模式匹配时,我只想让包装操作解包,并且需要包装的解包操作。
不幸的是,据我所知,我必须编写一个非常难看的ViewPatterns
ed模式同义词。有没有办法更好地写这个?