on master help sign in
Merge pull request #15 from duog/master

Add instance HasTrie a => HasTrie (Maybe a)

commit319aab83a46db3de19dc4c5bf7061746f68638c5 authorConal Elliott <conal@conal.net> dateThu 6 Jul 2017, 16:42 (9 years ago) parentecb838fa318595
1 file changed+10
src/Data/MemoTrie.hs+10
src/Data/MemoTrie.hs+10
@@ -315,6 +315,16 @@ if' _ e True = e
315315 BoolTrie f t
316316-}
317317
318+instance HasTrie a => HasTrie (Maybe a) where
319+ data (:->:) (Maybe a) b = MaybeTrie b (a :->: b)
320+ trie f = MaybeTrie (f Nothing) (trie (f . Just))
321+ untrie (MaybeTrie nothing_val a_trie) = maybe nothing_val (untrie a_trie)
322+ enumerate (MaybeTrie nothing_val a_trie) = (Nothing, nothing_val) : enum' Just a_trie
323+
324+instance Newtype (Maybe a :->: x) where
325+ type O (Maybe a :->: x) = (x, a :->: x)
326+ pack (a,f) = MaybeTrie a f
327+ unpack (MaybeTrie a f) = (a,f)
318328
319329instance (HasTrie a, HasTrie b) => HasTrie (Either a b) where
320330 data (Either a b) :->: x = EitherTrie (a :->: x) (b :->: x)