@@ -140,7 +140,7 @@ inTrie3 = untrie ~> inTrie2
140140---- Instances
141141
142142instance HasTrie () where
143− data () :->: a = UnitTrie a
143+ newtype () :->: a = UnitTrie a
144144 trie f = UnitTrie (f ())
145145 untrie (UnitTrie a) = \ () -> a
146146 enumerate (UnitTrie a) = [((),a)]
@@ -244,7 +244,7 @@ as `weave` [] = as
244244
245245
246246instance (HasTrie a, HasTrie b) => HasTrie (a,b) where
247− data (a,b) :->: x = PairTrie (a :->: (b :->: x))
247+ newtype (a,b) :->: x = PairTrie (a :->: (b :->: x))
248248 trie f = PairTrie (trie (trie . curry f))
249249 untrie (PairTrie t) = uncurry (untrie . untrie t)
250250 enumerate (PairTrie tt) =
@@ -277,7 +277,7 @@ instance (HasTrie a, HasTrie b) => HasTrie (a,b) where
277277-}
278278
279279instance (HasTrie a, HasTrie b, HasTrie c) => HasTrie (a,b,c) where
280− data (a,b,c) :->: x = TripleTrie (((a,b),c) :->: x)
280+ newtype (a,b,c) :->: x = TripleTrie (((a,b),c) :->: x)
281281 trie f = TripleTrie (trie (f . trip))
282282 untrie (TripleTrie t) = untrie t . detrip
283283 enumerate (TripleTrie t) = enum' trip t
@@ -290,7 +290,7 @@ detrip (a,b,c) = ((a,b),c)
290290
291291
292292instance HasTrie x => HasTrie [x] where
293− data [x] :->: a = ListTrie (Either () (x,[x]) :->: a)
293+ newtype [x] :->: a = ListTrie (Either () (x,[x]) :->: a)
294294 trie f = ListTrie (trie (f . list))
295295 untrie (ListTrie t) = untrie t . delist
296296 enumerate (ListTrie t) = enum' list t
@@ -304,7 +304,7 @@ delist (x:xs) = Right (x,xs)
304304
305305#define WordInstance(Type,TrieType)\
306306instance HasTrie Type where \
307− data Type :->: a = TrieType ([Bool] :->: a);\
307+ newtype Type :->: a = TrieType ([Bool] :->: a);\
308308 trie f = TrieType (trie (f . unbits));\
309309 untrie (TrieType t) = untrie t . bits;\
310310 enumerate (TrieType t) = enum' unbits t
@@ -316,7 +316,7 @@ WordInstance(Word32,Word32Trie)
316316WordInstance(Word64,Word64Trie)
317317
318318-- instance HasTrie Word where
319−-- data Word :->: a = WordTrie ([Bool] :->: a)
319+-- newtype Word :->: a = WordTrie ([Bool] :->: a)
320320-- trie f = WordTrie (trie (f . unbits))
321321-- untrie (WordTrie t) = untrie t . bits
322322-- enumerate (WordTrie t) = enum' unbits t
@@ -338,7 +338,7 @@ unbits [] = 0
338338unbits (x:xs) = unbit x .|. shiftL (unbits xs) 1
339339
340340instance HasTrie Char where
341− data Char :->: a = CharTrie (Int :->: a)
341+ newtype Char :->: a = CharTrie (Int :->: a)
342342 untrie (CharTrie t) n = untrie t (fromEnum n)
343343 trie f = CharTrie (trie (f . toEnum))
344344 enumerate (CharTrie t) = enum' toEnum t
@@ -350,7 +350,7 @@ instance HasTrie Char where
350350
351351#define IntInstance(IntType,WordType,TrieType) \
352352instance HasTrie IntType where \
353− data IntType :->: a = TrieType (WordType :->: a); \
353+ newtype IntType :->: a = TrieType (WordType :->: a); \
354354 untrie (TrieType t) n = untrie t (fromIntegral n); \
355355 trie f = TrieType (trie (f . fromIntegral)); \
356356 enumerate (TrieType t) = enum' fromIntegral t
@@ -365,7 +365,7 @@ IntInstance(Int64,Word64,Int64Trie)
365365-- extract the sign bit.
366366
367367instance HasTrie Integer where
368− data Integer :->: a = IntegerTrie ((Bool,[Bool]) :->: a)
368+ newtype Integer :->: a = IntegerTrie ((Bool,[Bool]) :->: a)
369369 trie f = IntegerTrie (trie (f . unbitsZ))
370370 untrie (IntegerTrie t) = untrie t . bitsZ
371371 enumerate (IntegerTrie t) = enum' unbitsZ t