在我的旅行过程中,我写了这个模式的同义词:
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)
Run Code Online (Sandbox Code Playgroud)
最后一行捕获了此模式同义词的意图:虚拟构造函数ConsK包装(with StreamK)和unwraps(xs)其参数.当我在这个构造函数上进行模式匹配时,我只想让包装操作解包,并且需要包装的解包操作.
不幸的是,据我所知,我必须写一个非常难看的ViewPatternsed模式同义词.有没有办法写得更好?