如何返回包含不以前缀开头的键的Haskell子序列

如何返回包含不以前缀开头的键的Haskell子序列,haskell,trie,Haskell,Trie,我一直在玩弄Haskell Data.Trie模块,想知道是否有人知道/建议返回不匹配前缀的子项的方法,而不是匹配的submap。在下面的示例中,对于[0,1],我希望[1,1]和[1,0,1];对于[1],为空 我所想的可能并不像我所希望的那个样高效——比如寻找和常规子域不相交的键 Prelude Data.Trie...> let t=Data.Trie.fromList [(pack [1,1],3),(pack [1,0,1],5)] Prelude Data.Trie...&g

我一直在玩弄Haskell Data.Trie模块,想知道是否有人知道/建议返回不匹配前缀的子项的方法,而不是匹配的submap。在下面的示例中,对于
[0,1]
,我希望
[1,1]
[1,0,1]
;对于
[1]
,为空

我所想的可能并不像我所希望的那个样高效——比如寻找和常规子域不相交的键

Prelude Data.Trie...> let t=Data.Trie.fromList [(pack [1,1],3),(pack [1,0,1],5)]

Prelude Data.Trie...> Data.Trie.submap (pack [0,1]) t
Data.Trie.fromList []

Prelude Data.Trie...> Data.Trie.submap (pack [1]) t
Data.Trie.fromList [("\SOH\NUL\SOH",5),("\SOH\SOH",3)]

我想这并不容易,因为库没有公开任何可用于创建这种新的低级函数的内部构件。也许最合理的选择是研究内部结构并为库贡献这样一个功能或者,您可以推出自己的trie实现。因为看起来你的键只是布尔键,所以这应该不难,而且看起来是一个很好的练习。