# Ticket #1005: log_shift_ops_new.patch

File log_shift_ops_new.patch, 43.6 KB (added by guest, 11 years ago)
Line
1
2New patches:
3
4[Logical Shift Operators
5rob@mits.coop**20061116063336] {
6hunk ./Data/Bits.hs 25
7+    lShift,            -- :: a -> Int -> a
8hunk ./Data/Bits.hs 35
9+    lShiftL, lShiftR,  -- :: a -> Int -> a
10hunk ./Data/Bits.hs 89
11-    {-| Shift the argument left by the specified number of bits.
12-       Right shifts (signed) are specified by giving a negative value.
13+    {-| Arithmetic shift of the argument left by the specified number of
14+        bits. Right shifts (signed) are specified by giving a negative
15+        value.
16hunk ./Data/Bits.hs 102
17+    {-| Logical shift of the argument left by the specified number of bits.
18+        Right shifts (signed) are specified by giving a negative value.
19+
20+        An instance can define either this unified 'lshift' or 'lshiftR'
21+        and (optionally) 'lshiftL', depending on which is more convenient
22+        for the type in question. Generally a definition of only 'lshiftR'
23+        is most suitable. Definition of the logical shift operators is
24+        only necessary for signed types. -}
25+    lShift          :: a -> Int -> a
26+    x `lShift` i | i<0  = x `lShiftR` (-i)
27+                   | i==0 = x
28+                   | i>0  = x `lShiftL` i
29+
30+
31hunk ./Data/Bits.hs 175
32-    {-| Shift the argument left by the specified number of bits
33-       (which must be non-negative).
34+    {-| Arithmetic shift of the argument left by the specified number of
35+        bits (which must be non-negative).
36hunk ./Data/Bits.hs 184
37-    {-| Shift the argument right (signed) by the specified number of bits
38-       (which must be non-negative).
39+    {-| Arithmetic shift of the argument right (signed) by the specified
40+        number of bits (which must be non-negative).
41hunk ./Data/Bits.hs 193
42+    {-| Logical shift of the argument right (unsigned) by the specified
43+        number of bits (which must be non-negative).
44+
45+        An instance can define either this and (optionally) 'lShiftL'
46+        or the unified 'lShift', depending on which is more convenient
47+        for the type in        question. Definition of the logical shift
48+        operators is only necessary for signed types. -}
49+    lShiftR         :: a -> Int -> a
50+    lShiftR       = shiftR
51+
52+    {-| Logical shift of the argument left by the specified number of bits
53+        (which must be non-negative).
54+
55+        An instance can define either this and 'lShiftR' or the unified
56+       'lShift', depending on which is more convenient for the type in
57+       question. Defining this method is generally unnecessary since it
58+        is in practice identical to the signed shiftL operator. -}
59+    lShiftL         :: a -> Int -> a
60+    lShiftL       = shiftL
61+
62hunk ./Data/Bits.hs 231
63+
64hunk ./Data/Bits.hs 243
65+    (I# x#) `lShiftR` (I# i#) = I# (x# `iShiftRL#` i#)
66hunk ./Data/Bits.hs 273
67+    x `lShiftR` i          = fromIntegral (shiftR ((fromIntegral x)::Word) i)
68+
69hunk ./Data/Bits.hs 342
70+   -- Just as a positive integer is considered to have an infinite ray of
71+   -- clear bits preceding it, a negative integer is considered to have an
72+   -- infinite ray of set bits preceding it so lShiftR is nonsensical
73+   -- when applied to Integer
74+   lShiftR _ _ = error "Data.Bits.lShiftR(Integer)"
75+
76hunk ./GHC/Int.hs 124
77+    (I8# x#) `lShiftR` (I# i#) = I8# (narrow8Int# (word2Int# (x'# `shiftRL#` i#)))
78+        where
79+        x'# = narrow8Word# (int2Word# x#)
80hunk ./GHC/Int.hs 234
81+    (I16# x#) `lShiftR` (I# i#) = I16# (narrow16Int# (word2Int# (x'# `shiftRL#` i#)))
82+        where
83+        x'# = narrow16Word# (int2Word# x#)
84hunk ./GHC/Int.hs 361
85+    (I32# x#) `lShiftR` (I# i#) = I32# (x# `iShiftRL32#` i#)
86hunk ./GHC/Int.hs 397
87+foreign import "stg_iShiftRL32"    unsafe iShiftRL32#    :: Int32# -> Int# -> Int32#
88hunk ./GHC/Int.hs 493
89+    (I32# x#) `lShiftR` (I# i#) = I32# (x# `iShiftRL#` i#)
90hunk ./GHC/Int.hs 635
91+    (I64# x#) `lShiftR` (I# i#) = I64# (x# `iShiftRL64#` i#)
92hunk ./GHC/Int.hs 654
93-iShiftL64#, iShiftRA64# :: Int64# -> Int# -> Int64#
94+iShiftL64#, iShiftRA64#, iShiftRL64# :: Int64# -> Int# -> Int64#
95hunk ./GHC/Int.hs 664
96+a `iShiftRL64#` b | b >=# 64# = if a `ltInt64#` (intToInt64# 0#)
97+                                       then intToInt64# (-1#)
98+                                       else intToInt64# 0#
99+                 | otherwise = a `uncheckedIShiftRL64#` b
100+
101hunk ./GHC/Int.hs 695
102+foreign import ccall unsafe "stg_uncheckedIShiftRL64"    uncheckedIShiftRL64#    :: Int64# -> Int# -> Int64#
103hunk ./GHC/Int.hs 780
104+    (I64# x#) `lShiftR` (I# i#) = I64# (x# `iShiftRL#` i#)
105}
106
107Context:
108
109[Control.Parallel.Strategies clean-up: Added export list to avoid exporting seq, fixed import list strangeness that haddock choked on, and moved the deprecated functions to a separate section.
110bringert@cs.chalmers.se**20061113224202]
111[Control.Parallel.Strategies: added NFData instances for Data.Int.*, Data.Word.*, Maybe, Either, Map, Set, Tree, IntMap, IntSet.
112bringert@cs.chalmers.se**20061113221843]
113[Control.Parallel.Strategies: deprecate sPar, sSeq, Assoc, fstPairFstList, force and sforce.
114bringert@cs.chalmers.se**20061113215219
115 Code comments indicated that sPar and sSeq have been superceded by sparking and demanding, and that Assoc, fstPairFstList, force and sforce are examples and hacks needed by the Lolita system.
116]
118Malcolm.Wallace@cs.york.ac.uk**20061113113221]
119[Control.Parallel.Strategies: clarified documentation of parListChunk.
120bringert@cs.chalmers.se**20061112232904]
122bringert@cs.chalmers.se**20061112220445
124]
125[Fix broken pragmas; spotted by Bulat Ziganshin
126Ian Lynagh <igloo@earth.li>**20061111205916]
128Ross Paterson <ross@soi.city.ac.uk>**20060929103252]
129[hide Data.Array.IO.Internals
130Ross Paterson <ross@soi.city.ac.uk>**20061111113248
131
132 It's hidden from haddock, and everything it exports is re-exported by
133 Data.Array.IO.
134]
136Malcolm.Wallace@cs.york.ac.uk**20061110142710]
138Ross Paterson <ross@soi.city.ac.uk>**20061110141354]
139[whitespace only
140Ross Paterson <ross@soi.city.ac.uk>**20061110141326]
141[move fix to Data.Function
142Ross Paterson <ross@soi.city.ac.uk>**20061110141120]
143[import Prelude
144Ross Paterson <ross@soi.city.ac.uk>**20061110140445]
147 + A module with simple combinators working solely on and with
148   functions.
149 + The only new function is "on".
150 + Some functions from the Prelude are re-exported.
151]
152[__hscore_long_path_size is not portable beyond GHC
153Malcolm.Wallace@cs.york.ac.uk**20061110113222]
154[redefine writeFile and appendFile using withFile
155Ross Paterson <ross@soi.city.ac.uk>**20061107140359]
157Ross Paterson <ross@soi.city.ac.uk>**20061107134510]
158[remove conflicting import for nhc98
159Malcolm.Wallace@cs.york.ac.uk**20061108111215]
160[Add intercalate to Data.List (ticket #971)
161Josef Svenningsson <josef.svenningsson@gmail.com>**20061102122052]
162[non-GHC: fix canonicalizeFilePath
163Ross Paterson <ross@soi.city.ac.uk>**20061107133902
164
165 I've also removed the #ifdef __GLASGOW_HASKELL__ from the proper
166 Windows versions of a few functions.  These will need testing with
167 Hugs on Windows.
168]
169[enable canonicalizePath for non-GHC platforms
170Simon Marlow <simonmar@microsoft.com>**20061107121141]
171[Update documentation for hWaitForInput
172Simon Marlow <simonmar@microsoft.com>**20061107111430
173 See #972
174 Merge to 6.6 branch.
175]
176[Use unchecked shifts to implement Data.Bits.rotate
177Samuel Bronson <naesten@gmail.com>**20061012125553
178 This should get rid of those cases, maybe lower the size enough that the inliner will like it?
179]
181Ross Paterson <ross@soi.city.ac.uk>**20061106124140]
182[fix example in docs
183Ross Paterson <ross@soi.city.ac.uk>**20061106115628]
184[Add intercalate and split to Data.List
185Josef Svenningsson <josef.svenningsson@gmail.com>*-20061024172357]
186[Data.Generics.Basics is GHC-only
187Ross Paterson <ross@soi.city.ac.uk>**20061102111736]
188[#ifdef around non-portable Data.Generics.Basics
189Malcolm.Wallace@cs.york.ac.uk**20061102103445]
191simonpj@microsoft**20061101102059]
192[minor clarification of RandomGen doc
193Ross Paterson <ross@soi.city.ac.uk>**20061030230842]
194[rearrange docs a bit
195Ross Paterson <ross@soi.city.ac.uk>**20061030161223]
196[Add intercalate and split to Data.List
197Josef Svenningsson <josef.svenningsson@gmail.com>**20061024172357]
198[Export pseq from Control.Parallel, and use it in Control.Parallel.Strategies
199Simon Marlow <simonmar@microsoft.com>**20061027150141]
200[`par` should be infixr 0
201Simon Marlow <simonmar@microsoft.com>**20061027130800
202 Alas, I didn't spot this due to lack of testing, and the symptom is
203 that an expression like x `par` y `seq z will have exactly the wrong
204 parallelism properties.  The workaround is to add parantheses.
205
206 I think we could push this to the 6.6 branch.
207]
208[fix example in comment
209Ross Paterson <ross@soi.city.ac.uk>**20061023163925]
210[Use the new Any type for dynamics (GHC only)
211simonpj@microsoft**20061019160408]
213Malcolm.Wallace@cs.york.ac.uk**20061012135200]
214[Remove Data.FiniteMap, add Control.Applicative, Data.Traversable, and
215Malcolm.Wallace@cs.york.ac.uk**20061012095605
216 Data.Foldable to the nhc98 build.
217]
218[STM invariants
219tharris@microsoft.com**20061007123253]
220[Inline shift in GHC's Bits instances for {Int,Word}{,8,16,32,64}
221Samuel Bronson <naesten@gmail.com>**20061009020906]
222[Don't create GHC.Prim when bootstrapping; we can't, and we don't need it
223Ian Lynagh <igloo@earth.li>**20061004165355]
224[Data.ByteString: fix lazyness of take, drop & splitAt
225Don Stewart <dons@cse.unsw.edu.au>**20061005011703
226
227 ByteString.Lazy's take, drop and splitAt were too strict when demanding
228 a byte string. Spotted by Einar Karttunen. Thanks to him and to Bertram
229 Felgenhauer for explaining the problem and the fix.
230
231]
232[Fix syntax error that prevents building Haddock documentation on Windows
233brianlsmith@gmail.com**20060917013530]
234[Hugs only: unbreak typeRepKey
235Ross Paterson <ross@soi.city.ac.uk>**20060929102743]
236[make hGetBufNonBlocking do something on Windows w/ -threaded
237Simon Marlow <simonmar@microsoft.com>**20060927145811
238 hGetBufNonBlocking will behave the same as hGetBuf on Windows now, which
239 is better than just crashing (which it did previously).
240]
241[add typeRepKey :: TypeRep -> IO Int
242Simon Marlow <simonmar@microsoft.com>**20060927100342
243 See feature request #880
244]
246Ross Paterson <ross@soi.city.ac.uk>**20060926135843]
247[Add strict versions of insertWith and insertWithKey (Data.Map)
248jeanphilippe.bernardy@gmail.com**20060910162443]
249[doc tweaks, including more precise equations for evaluate
250Ross Paterson <ross@soi.city.ac.uk>**20060910115259]
251[Sync Data.ByteString with stable branch
252Don Stewart <dons@cse.unsw.edu.au>**20060909050111
253
254 This patch:
255     * hides the LPS constructor (its in .Base if you need it)
256     * adds functions to convert between strict and lazy bytestrings
258
259]
260[Typeable1 instances for STM and TVar
261Ross Paterson <ross@soi.city.ac.uk>**20060904231425]
262[remove obsolete Hugs stuff
263Ross Paterson <ross@soi.city.ac.uk>**20060904223944]
264[Cleaner isInfixOf suggestion from Ross Paterson
265John Goerzen <jgoerzen@complete.org>**20060901143654]
266[New function isInfixOf that searches a list for a given sublist
267John Goerzen <jgoerzen@complete.org>**20060831151556
268
269 Example:
270
272 isInfixOf "Ial" "I really like Haskell." -> False
273
274 This function was first implemented in MissingH as MissingH.List.contains
275]
276[Better doc on Data.Map.lookup: explain what the monad is for
277jeanphilippe.bernardy@gmail.com**20060903133440]
278[fix hDuplicateTo on Windows
279Simon Marlow <simonmar@microsoft.com>**20060901150016
280 deja vu - I'm sure I remember fixing this before...
281]
282[Improve documentation of atomically
283simonpj@microsoft**20060714120207]
284[Add missing method genRange for StdGen (fixes #794)
285simonpj@microsoft**20060707151901
286
287        MERGE TO STABLE
288
289 Trac #794 reports (correctly) that the implementation of StdGen
290 only returns numbers in the range (0..something) rather than
291 (minBound, maxBound), which is what StdGen's genRange claims.
292
293 This commit fixes the problem, by implementing genRange for StdGen
294 (previously it just used the default method).
295
296
297]
298[mark nhc98 import hack
299Ross Paterson <ross@soi.city.ac.uk>**20060831125219]
301Simon Marlow <simonmar@microsoft.com>**20060831104200]
302[import Control.Arrow.ArrowZero to help nhc98's type checker
303Malcolm.Wallace@cs.york.ac.uk**20060831101105]
304[remove Text.Regex(.Posix) from nhc98 build
305Malcolm.Wallace@cs.york.ac.uk**20060831101016]
307Ross Paterson <ross@soi.city.ac.uk>**20060830163521]
308[fix doc typo
309Ross Paterson <ross@soi.city.ac.uk>**20060830134123]
311Ross Paterson <ross@soi.city.ac.uk>**20060830133805
312
314]
315[Make length a good consumer
316simonpj@microsoft*-20060508142726
317
318 Make length into a good consumer.  Fixes Trac bug #707.
319
320 (Before length simply didn't use foldr.)
321
322]
324Don Stewart <dons@cse.unsw.edu.au>**20060824081118
325
326 flip mapM_ is more and more common, I find. Several suggestions have
327 been made to add this, as foreach or something similar. This patch
328 does just that:
329
330     forM  :: (Monad m) => [a] -> (a -> m b) -> m [b]
331     forM_ :: (Monad m) => [a] -> (a -> m b) -> m ()
332
333 So we can write:
334
335     Prelude Control.Monad> forM_ [1..4] \$ \x -> print x
336     1
337     2
338     3
339     4
340
341]
342[Hide internal module from haddock in Data.ByteString
343Don Stewart <dons@cse.unsw.edu.au>**20060828011515]
345Ross Paterson <ross@soi.city.ac.uk>**20060827170407]
346[expand advice on importing these modules
347Ross Paterson <ross@soi.city.ac.uk>**20060827164044]
349Ross Paterson <ross@soi.city.ac.uk>**20060827115140]
350[Clarify how one hides Prelude.catch
351Don Stewart <dons@cse.unsw.edu.au>**20060826124346
352
353 User feedback indicated that an example was required, of how to hide
354 Prelude.catch, so add such an example to the docs
355
356]
357[Workaround for OSes that don't have intmax_t and uintmax_t
358Ian Lynagh <igloo@earth.li>**20060825134936
359 OpenBSD (and possibly others) do not have intmax_t and uintmax_t types:
361 so substitute (unsigned) long long if we have them, otherwise
362 (unsigned) long.
363
364]
366Simon Marlow <simonmar@microsoft.com>**20060825110610]
367[document minimal complete definition for Bits
368Ross Paterson <ross@soi.city.ac.uk>**20060824140504]
369[C regex library bits have moved to the regex-posix package
370Simon Marlow <simonmar@microsoft.com>**20060824132311]
371[Add shared Typeable support (ghc only)
372Esa Ilari Vuokko <ei@vuokko.info>**20060823003126]
373[this should have been removed with the previous patch
374Simon Marlow <simonmar@microsoft.com>**20060824121223]
375[remove Text.Regx & Text.Regex.Posix
376Simon Marlow <simonmar@microsoft.com>**20060824094615
377 These are subsumed by the new regex-base, regex-posix and regex-compat
378 packages.
379]
380[explicitly tag Data.ByteString rules with the FPS prefix.
381Don Stewart <dons@cse.unsw.edu.au>**20060824041326]
382[Add spec rules for sections in Data.ByteString
383Don Stewart <dons@cse.unsw.edu.au>**20060824012611]
384[Sync Data.ByteString with current stable branch, 0.7
385Don Stewart <dons@cse.unsw.edu.au>**20060823143338]
387Simon Marlow <simonmar@microsoft.com>**20060823095059]
388[copyFile: try removing the target file before opening it for writing
389Simon Marlow <simonmar@microsoft.com>*-20060822121909]
390[copyFile: try removing the target file before opening it for writing
391Simon Marlow <simonmar@microsoft.com>**20060822121909]
392[add alternative functors and extra instances
393Ross Paterson <ross@soi.city.ac.uk>**20060821152151
394
395 * Alternative class, for functors with a monoid
396 * instances for Const
397 * instances for arrows
398]
399[generate Haddock docs on all platforms
400Simon Marlow <simonmar@microsoft.com>**20060821131612]
401[remove extra comma from import
402Ross Paterson <ross@soi.city.ac.uk>**20060819173954]
403[fix docs for withC(A)StringLen
404Ross Paterson <ross@soi.city.ac.uk>**20060818170328]
405[use Haskell'98 compliant indentation in do blocks
406Malcolm.Wallace@cs.york.ac.uk**20060818130810]
407[use correct names of IOArray operations for nhc98
408Malcolm.Wallace@cs.york.ac.uk**20060818130714]
409[add mapMaybe and mapEither, plus WithKey variants
410Ross Paterson <ross@soi.city.ac.uk>**20060817235041]
411[remove Text.Html from nhc98 build
412Malcolm.Wallace@cs.york.ac.uk**20060817135502]
413[eliminate more HOST_OS tests
414Ross Paterson <ross@soi.city.ac.uk>**20060815190609]
415[Hugs only: disable unused process primitives
416Ross Paterson <ross@soi.city.ac.uk>**20060813184435
417
418 These were the cause of Hugs bug #30, I think, and weren't used by Hugs anyway.
419]
420[markup fix to Data.HashTable
421Ross Paterson <ross@soi.city.ac.uk>**20060812103835]
422[revert removal of ghcconfig.h from package.conf.in
423Ross Paterson <ross@soi.city.ac.uk>**20060812082702
424
425 as it's preprocessed with -undef (pointed out by Esa Ilari Vuokko)
426]
427[fix Data.HashTable for non-GHC
428Ross Paterson <ross@soi.city.ac.uk>**20060811231521]
429[remove deprecated 'withObject'
430Simon Marlow <simonmar@microsoft.com>**20060811152350]
431[Jan-Willem Maessen's improved implementation of Data.HashTable
432Simon Marlow <simonmar@microsoft.com>**20060811151024
433 Rather than incrementally enlarging the hash table, this version
434 just does it in one go when the table gets too full.
435]
436[Warning police: Make some prototypes from the RTS known
437sven.panne@aedion.de**20060811144629]
438[Warning police: Removed useless catch-all clause
439sven.panne@aedion.de**20060811142208]
440[reduce dependency on ghcconfig.h
441Ross Paterson <ross@soi.city.ac.uk>**20060811124030
442
443 The only remaining use is in cbits/dirUtils.h, which tests solaris2_HOST_OS
444
445 (Also System.Info uses ghcplatform.h and several modules import MachDeps.h
446 to get SIZEOF_* and ALIGNMENT_* from ghcautoconf.h)
447]
448[(non-GHC only) track MArray interface change
449Ross Paterson <ross@soi.city.ac.uk>**20060810182902]
450[move Text.Html to a separate package
451Simon Marlow <simonmar@microsoft.com>**20060810113017]
452[bump version to 2.0
453Simon Marlow <simonmar@microsoft.com>**20060810112833]
454[Remove deprecated Data.FiniteMap and Data.Set interfaces
455Simon Marlow <simonmar@microsoft.com>**20060809153810]
456[move altzone test from ghc to base package
457Ross Paterson <ross@soi.city.ac.uk>**20060809124259]
458[remove unnecessary #include "ghcconfig.h"
459Ross Paterson <ross@soi.city.ac.uk>**20060809123812]
460[Change the API of MArray to allow resizable arrays
461Simon Marlow <simonmar@microsoft.com>**20060809100548
462 See #704
463
464 The MArray class doesn't currently allow a mutable array to change its
465 size, because of the pure function
466
467   bounds :: (HasBounds a, Ix i) => a i e -> (i,i)
468
469 This patch removes the HasBounds class, and adds
470
471   getBounds :: (MArray a e m, Ix i) => a i e -> m (i,i)
472
473 to the MArray class, and
474
475   bounds :: (IArray a e, Ix i) => a i e -> (i,i)
476
477 to the IArray class.
478
479 The reason that bounds had to be incorporated into the IArray class is
480 because I couldn't make DiffArray work without doing this.  DiffArray
481 acts as a layer converting an MArray into an IArray, and there was no
482 way (that I could find) to define an instance of HasBounds for
483 DiffArray.
484]
485[deprecate this module.
486Simon Marlow <simonmar@microsoft.com>**20060808100708]
488Simon Marlow <simonmar@microsoft.com>**20060807155545]
489[remove spurious 'extern "C" {'
490Simon Marlow <simonmar@microsoft.com>**20060724160258]
491[Fix unsafeIndex for large ranges
492Simon Marlow <simonmar@microsoft.com>**20060721100225]
493[disambiguate uses of foldr for nhc98 to compile without errors
494Malcolm.Wallace@cs.york.ac.uk**20060711161614]
496Malcolm.Wallace@cs.york.ac.uk**20060711160941]
497[breakpointCond
498Lemmih <lemmih@gmail.com>**20060708055528]
499[UNDO: Merge "unrecognized long opt" fix from 6.4.2
500Simon Marlow <simonmar@microsoft.com>**20060705142537
501 This patch undid the previous patch, "RequireOrder: do not collect
502 unrecognised options after a non-opt".  I asked Sven to revert it, but
504
505 See bug #473.
506]
507[Avoid strictness in accumulator for unpackFoldr
508Don Stewart <dons@cse.unsw.edu.au>**20060703091806
509
510 The seq on the accumulator for unpackFoldr will break in the presence of
511 head/build rewrite rules. The empty list case will be forced, producing
512 an exception. This is a known issue with seq and rewrite rules that we
513 just stumbled on to.
514
515]
516[Disable unpack/build fusion
517Don Stewart <dons@cse.unsw.edu.au>**20060702083913
518
519 unpack/build on bytestrings seems to trigger a bug when interacting with
520 head/build fusion in GHC.List. The bytestring001 testcase catches it.
521
522 I'll investigate further, but best to disable this for now (its not
523 often used anyway).
524
525 Note that with -frules-off or ghc 6.4.2 things are fine. It seems to
526 have emerged with the recent rules changes.
527
528]
529[Import Data.ByteString.Lazy, improve ByteString Fusion, and resync with FPS head
530Don Stewart <dons@cse.unsw.edu.au>**20060701084345
531
532 This patch imports the Data.ByteString.Lazy module, and its helpers,
533 providing a ByteString implemented as a lazy list of strict cache-sized
534 chunks. This type allows the usual lazy operations to be written on
535 bytestrings, including lazy IO, with much improved space and time over
536 the [Char] equivalents.
537
538]
539[Wibble in docs for new ForeignPtr functionsn
540Don Stewart <dons@cse.unsw.edu.au>**20060609075924]
542Ross Paterson <ross@soi.city.ac.uk>**20060622170436]
543[default to NoBuffering on Windows for a read/write text file
544Simon Marlow <simonmar@microsoft.com>**20060622144446
545 Fixes (works around) #679
546]
548Simon Marlow <simonmar@microsoft.com>**20060622144433]
549[clarify and expand docs
550Simon Marlow <simonmar@microsoft.com>**20060622112911]
551[Add minView and maxView to Map and Set
552jeanphilippe.bernardy@gmail.com**20060616180121]
554Ross Paterson <ross@soi.city.ac.uk>**20060614114456]
556Ross Paterson <ross@soi.city.ac.uk>**20060613142704]
557[Optimised foreign pointer representation, for heap-allocated objects
558Don Stewart <dons@cse.unsw.edu.au>**20060608015011]
560simonpj@microsoft.com**20060605115814
561
562 This commit adds the 'inline' function described in the
563 related patch in the compiler.
564
566
567]
568[small intro to exceptions
569Ross Paterson <ross@soi.city.ac.uk>**20060525111604]
570[export breakpoint
571Simon Marlow <simonmar@microsoft.com>**20060525090456]
572[Merge in changes from fps head. Highlights:
573Don Stewart <dons@cse.unsw.edu.au>**20060525065012
574
575     Wed May 24 15:49:38 EST 2006  sjanssen@cse.unl.edu
576       * instance Monoid ByteString
577
578     Wed May 24 15:04:04 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
579       * Rearange export lists for the .Char8 modules
580
581     Wed May 24 14:59:56 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
582       * Implement mapAccumL and reimplement mapIndexed using loopU
583
584     Wed May 24 14:47:32 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
585       * Change the implementation of the unfoldr(N) functions.
586       Use a more compact implementation for unfoldrN and change it's behaviour
587       to only return Just in the case that it actually 'overflowed' the N, so
588       the boundary case of unfolding exactly N gives Nothing.
589       Implement unfoldr and Lazy.unfoldr in terms of unfoldrN. Use fibonacci
590       growth for the chunk size in unfoldr
591
592     Wed May 24 08:32:29 EST 2006  sjanssen@cse.unl.edu
593       * Add unfoldr to ByteString and .Char8
594       A preliminary implementation of unfoldr.
595
596     Wed May 24 01:39:41 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
597       * Reorder the export lists to better match the Data.List api
598
599     Tue May 23 14:04:32 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
600       * pack{Byte,Char} -> singleton. As per fptools convention
601
602     Tue May 23 14:00:51 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
603       * elemIndexLast -> elemIndexEnd
604
605     Tue May 23 13:57:34 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
606       * In the search for a more orthogonal api, we kill breakFirst/breakLast,
607         which were of dubious value
608
609     Tue May 23 12:24:09 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
610       * Abolish elems. It's name implied it was unpack, but its type didn't. it made no sense
611
612     Tue May 23 10:42:09 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
613       * Minor doc tidyup. Use haddock markup better.
614
615     Tue May 23 11:00:31 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
616       * Simplify the join() implementation. Spotted by Duncan.
617
618]
620Simon Marlow <simonmar@microsoft.com>**20060524121823]
621[Sync with FPS head, including the following patches:
622Don Stewart <dons@cse.unsw.edu.au>**20060520030436
623
624     Thu May 18 15:45:46 EST 2006  sjanssen@cse.unl.edu
625       * Export unsafeTake and unsafeDrop
626
627     Fri May 19 11:53:08 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
629
630     Fri May 19 13:41:24 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
631       * Add fuseable scanl, scanl1 + properties
632
633     Fri May 19 18:20:40 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
634       * Spotted another chance to use unsafeTake,Drop (in groupBy)
635
636     Thu May 18 09:24:25 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
637       * More effecient findIndexOrEnd based on the impl of findIndex
638
639     Thu May 18 09:22:49 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
640       * Eliminate special case in findIndex since it's handled anyway.
641
642     Thu May 18 09:19:08 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
643       * Add unsafeTake and unsafeDrop
644       These versions assume the n is in the bounds of the bytestring, saving
645       two comparison tests. Then use them in varous places where we think this
646       holds. These cases need double checking (and there are a few remaining
647       internal uses of take / drop that might be possible to convert).
648       Not exported for the moment.
649
650     Tue May 16 23:15:11 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
651       * Handle n < 0 in drop and splitAt. Spotted by QC.
652
653     Tue May 16 22:46:22 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
654       * Handle n <= 0 cases for unfoldr and replicate. Spotted by QC
655
656     Tue May 16 21:34:11 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
657       * mapF -> map', filterF -> filter'
658
659]
661Ross Paterson <ross@soi.city.ac.uk>**20060518154723]
662[simplify indexing in Data.Sequence
663Ross Paterson <ross@soi.city.ac.uk>**20060518154316]
664[Move Eq, Ord, Show instances for ThreadId to GHC.Conc
665Simon Marlow <simonmar@microsoft.com>**20060518113339
666 Eliminates orphans.
667]
668[Better error handling in the IO manager thread
669Simon Marlow <simonmar@microsoft.com>**20060518113303
670 In particular, handle EBADF just like rts/posix/Select.c, by waking up
671 all the waiting threads.  Other errors are thrown, instead of just
672 being ignored.
673]
674[#define _REENTRANT 1  (needed to get the right errno on some OSs)
675Simon Marlow <simonmar@microsoft.com>**20060518104151
676 Part 2 of the fix for threaded RTS problems on Solaris and possibly
677 *BSD (Part 1 was the same change in ghc/includes/Rts.h).
678]
679[copyCString* should be in IO. Spotted by Tomasz Zielonka
680Don Stewart <dons@cse.unsw.edu.au>**20060518012154]
681[add import Prelude to get dependencies right for Data/Fixed.hs
682Duncan Coutts <duncan.coutts@worc.ox.ac.uk>**20060517222044
683 Hopefully this fixes parallel builds.
684]
685[Fix negative index handling in splitAt, replicate and unfoldrN. Move mapF, filterF -> map', filter' while we're here
686Don Stewart <dons@cse.unsw.edu.au>**20060517020150]
687[Use our own realloc. Thus reduction functions (like filter) allocate on the Haskell heap. Makes around 10% difference.
688Don Stewart <dons@cse.unsw.edu.au>**20060513051736]
689[Last two CInt fixes for 64 bit, and bracket writeFile while we're here
690Don Stewart <dons@cse.unsw.edu.au>**20060512050750]
691[Some small optimisations, generalise the type of unfold
692Don Stewart <dons@cse.unsw.edu.au>**20060510043309
693
694     Tue May  9 22:36:29 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
695       * Surely the error function should not be inlined.
696
697     Tue May  9 22:35:53 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
698       * Reorder memory writes for better cache locality.
699
700     Tue May  9 23:28:09 EST 2006  Duncan Coutts <duncan.coutts@worc.ox.ac.uk>
701       * Generalise the type of unfoldrN
702
703       The type of unfoldrN was overly constrained:
704       unfoldrN :: Int -> (Word8 -> Maybe (Word8, Word8)) -> Word8 -> ByteString
705
706       if we compare that to unfoldr:
707       unfoldr :: (b -> Maybe (a, b)) -> b -> [a]
708
709       So we can generalise unfoldrN to this type:
710       unfoldrN :: Int -> (a -> Maybe (Word8, a)) -> a -> ByteString
711
712       and something similar for the .Char8 version. If people really do want to
713       use it a lot with Word8/Char then perhaps we should add a specialise pragma.
714
715     Wed May 10 13:26:40 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
716       * Add foldl', and thus a fusion rule for length . {map,filter,fold},
717       that avoids creating an array at all if the end of the pipeline is a 'length' reduction
718
719 **END OF DESCRIPTION***
720
721 Place the long patch description above the ***END OF DESCRIPTION*** marker.
722 The first line of this file will be the patch name.
723
724
725 This patch contains the following changes:
726
727 M ./Data/ByteString.hs -8 +38
728 M ./Data/ByteString/Char8.hs -6 +12
729]
730[portable implementation of WordPtr/IntPtr for non-GHC
731Ross Paterson <ross@soi.city.ac.uk>**20060510001826
732
733 plus much tweaking of imports to avoid cycles
734]
735[add WordPtr and IntPtr types to Foreign.Ptr, with associated conversions
736Simon Marlow <simonmar@microsoft.com>**20060509092606
737
738 As suggested by John Meacham.
739
740 I had to move the Show instance for Ptr into GHC.ForeignPtr to avoid
741 recursive dependencies.
742]
743[add CIntPtr, CUIntPtr, CIntMax, CUIntMax types
744Simon Marlow <simonmar@microsoft.com>**20060509092427]
746Simon Marlow <simonmar@microsoft.com>**20060509082739]
747[Two things. #if defined(__GLASGOW_HASKELL__) on INLINE [n] pragmas (for jhc). And careful use of INLINE on words/unwords halves runtime for those functions
748Don Stewart <dons@cse.unsw.edu.au>**20060509023425]
749[Make length a good consumer
750simonpj@microsoft**20060508142726
751
752 Make length into a good consumer.  Fixes Trac bug #707.
753
754 (Before length simply didn't use foldr.)
755
756]
757[Trim imports
758simonpj@microsoft**20060508142557]
759[Make unsafePerformIO lazy
760simonpj@microsoft**20060508142507
761
762 The stricteness analyser used to have a HACK which ensured that NOINLNE things
763 were not strictness-analysed.  The reason was unsafePerformIO. Left to itself,
764 the strictness analyser would discover this strictness for unsafePerformIO:
765        unsafePerformIO:  C(U(AV))
766 But then consider this sub-expression
767        unsafePerformIO (\s -> let r = f x in
768                               case writeIORef v r s of (# s1, _ #) ->
769                               (# s1, r #)
770 The strictness analyser will now find that r is sure to be eval'd,
771 and may then hoist it out.  This makes tests/lib/should_run/memo002
773
774 Solving this by making all NOINLINE things have no strictness info is overkill.
775 In particular, it's overkill for runST, which is perfectly respectable.
776 Consider
777        f x = runST (return x)
778 This should be strict in x.
779
780 So the new plan is to define unsafePerformIO using the 'lazy' combinator:
781
782        unsafePerformIO (IO m) = lazy (case m realWorld# of (# _, r #) -> r)
783
784 Remember, 'lazy' is a wired-in identity-function Id, of type a->a, which is
785 magically NON-STRICT, and is inlined after strictness analysis.  So
786 unsafePerformIO will look non-strict, and that's what we want.
787
788]
790Don Stewart <dons@cse.unsw.edu.au>**20060508122322
791
792 Mon May  8 10:40:14 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
793   * Fix all uses for Int that should be CInt or CSize in ffi imports.
794   Spotted by Igloo, dcoutts
795
796 Mon May  8 16:09:41 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
797   * Import nicer loop/loop fusion rule from ghc-ndp
798
799 Mon May  8 17:36:07 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
800   * Fix stack leak in split on > 60M strings
801
802 Mon May  8 17:50:13 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
803   * Try same fix for stack overflow in elemIndices
804
805]
806[Fix all uses for Int that should be CInt or CSize in ffi imports. Spotted by Duncan and Ian
807Don Stewart <dons@cse.unsw.edu.au>**20060508010311]
808[Fixed import list syntax
809Sven Panne <sven.panne@aedion.de>**20060507155008]
810[Faster filterF, filterNotByte
811dons@cse.unsw.edu.au**20060507042301]
812[Much faster find, findIndex. Hint from sjanssen
813dons@cse.unsw.edu.au**20060507033048]
814[Merge "unrecognized long opt" fix from 6.4.2
815Sven Panne <sven.panne@aedion.de>**20060506110519]
816[
817dons@cse.unsw.edu.au**20060506061029
818 Sat May  6 13:01:34 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
819   * Do loopU realloc on the Haskell heap. And add a really tough stress test
820
821 Sat May  6 12:28:58 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
822   * Use simple, 3x faster concat. Plus QC properties. Suggested by sjanssen and dcoutts
823
824 Sat May  6 15:59:31 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
825   * dcoutt's packByte bug squashed
826
827   With inlinePerformIO, ghc head was compiling:
828
829    packByte 255 `compare` packByte 127
830
831   into roughly
832
833    case mallocByteString 2 of
834        ForeignPtr f internals ->
835             case writeWord8OffAddr# f 0 255 of _ ->
836             case writeWord8OffAddr# f 0 127 of _ ->
837             case eqAddr# f f of
838                    False -> case compare (GHC.Prim.plusAddr# f 0)
840
841   which is rather stunning. unsafePerformIO seems to prevent whatever
843
844]
845[Add array fusion versions of map, filter and foldl
846dons@cse.unsw.edu.au**20060505060858
847
848 This patch adds fusable map, filter and foldl, using the array fusion
849 code for unlifted, flat arrays, from the Data Parallel Haskell branch,
850 after kind help from Roman Leshchinskiy,
851
852 Pipelines of maps, filters and folds should now need to walk the
853 bytestring once only, and intermediate bytestrings won't be constructed.
854
855]
856[fix for non-GHC
857Ross Paterson <ross@soi.city.ac.uk>**20060504093044]
858[use bracket in appendFile (like writeFile)
859Ross Paterson <ross@soi.city.ac.uk>**20060504091528]
860[writeFile: close the file on error
861Simon Marlow <simonmar@microsoft.com>**20060504084505
862 Suggested by Ross Paterson, via Neil Mitchell
863
864]
866dons@cse.unsw.edu.au**20060503105259
867
868 This patch brings Data.ByteString into sync with the FPS head.
869 The most significant of which is the new Haskell counting sort.
870
871 Changes:
872
873 Sun Apr 30 18:16:29 EST 2006  sjanssen@cse.unl.edu
874   * Fix foldr1 in Data.ByteString and Data.ByteString.Char8
875
876 Mon May  1 11:51:16 EST 2006  Don Stewart <dons@cse.unsw.edu.au>
877   * Add group and groupBy. Suggested by conversation between sjanssen and petekaz on #haskell
878
879 Mon May  1 16:42:04 EST 2006  sjanssen@cse.unl.edu
880   * Fix groupBy to match Data.List.groupBy.
881
882 Wed May  3 15:01:07 EST 2006  sjanssen@cse.unl.edu
883   * Migrate to counting sort.
884
885   Data.ByteString.sort used C's qsort(), which is O(n log n).  The new algorithm
886   is O(n), and is faster for strings larger than approximately thirty bytes.  We
887   also reduce our dependency on cbits!
888
889]
890[improve performance of Integer->String conversion
891Simon Marlow <simonmar@microsoft.com>**20060503113306
892 See
894
896
897
898]
899[inline withMVar, modifyMVar, modifyMVar_
900Simon Marlow <simonmar@microsoft.com>**20060503111152]
901[Fix string truncating in hGetLine -- it was a pasto from Simon's code
902Simon Marlow <simonmar@microsoft.com>**20060503103504
903 (from Don Stewart)
904]
905[Merge in Data.ByteString head. Fixes ByteString+cbits in hugs
906Don Stewart <dons@cse.unsw.edu.au>**20060429040733]
907[Import Data.ByteString from fps 0.5.
908Don Stewart <dons@cse.unsw.edu.au>**20060428130718
909 Fast, packed byte vectors, providing a better PackedString.
910
911]
912[fix previous patch
913Ross Paterson <ross@soi.city.ac.uk>**20060501154847]
914[fixes for non-GHC
915Ross Paterson <ross@soi.city.ac.uk>**20060501144322]
916[fix imports for mingw32 && !GHC
917Ross Paterson <ross@soi.city.ac.uk>**20060427163248]
918[RequireOrder: do not collect unrecognised options after a non-opt
919Simon Marlow <simonmar@microsoft.com>**20060426121110
920 The documentation for RequireOrder says "no option processing after
921 first non-option", so it doesn't seem right that we should process the
922 rest of the arguments to collect the unrecognised ones.  Presumably
923 the client wants to know about the unrecognised options up to the
924 first non-option, and will be using a different option parser for the
925 rest of the command line.
926
927 eg. before:
928
929 Prelude System.Console.GetOpt> getOpt' RequireOrder [] ["bar","--foo"]
930 ([],["bar","--foo"],["--foo"],[])
931
932 after:
933
934 Prelude System.Console.GetOpt> getOpt' RequireOrder [] ["bar","--foo"]
935 ([],["bar","--foo"],[],[])
936]
938Ashley Yakeley <ashley@semantic.org>**20060426072521]
940Ashley Yakeley <ashley@semantic.org>**20060425071853]
942Ross Paterson <ross@soi.city.ac.uk>**20060424102146]
943[add superclasses to Applicative and Traversable
944Ross Paterson <ross@soi.city.ac.uk>**20060411144734
945
946 Functor is now a superclass of Applicative, and Functor and Foldable
947 are now superclasses of Traversable.  The new hierarchy makes clear the
948 inclusions between the classes, but means more work in defining instances.
949 Default definitions are provided to help.
950]
952Ross Paterson <ross@soi.city.ac.uk>**20060410111443]
953[GHC.Base.breakpoint
954Lemmih <lemmih@gmail.com>**20060407125827]
955[Track the GHC source tree reorganisation
956Simon Marlow <simonmar@microsoft.com>**20060407041631]
957[in the show instance for Exception, print the type of dynamic exceptions
958Simon Marlow <simonmar@microsoft.com>**20060406112444
959 Unfortunately this requires some recursve module hackery to get at
960 the show instance for Typeable.
961]
962[implement ForeignEnvPtr, newForeignPtrEnv, addForeignPtrEnv for GHC
963Simon Marlow <simonmar@microsoft.com>**20060405155448]
965Simon Marlow <simonmar@microsoft.com>**20060327135018]
966[Rework previous: not a gcc bug after all
967Simon Marlow <simonmar@microsoft.com>**20060323161229
968 It turns out that we were relying on behaviour that is undefined in C,
969 and undefined behaviour in C means "the compiler can do whatever the
970 hell it likes with your entire program".  So avoid that.
971]
972[work around a gcc 4.1.0 codegen bug in -O2 by forcing -O1 for GHC.Show
973Simon Marlow <simonmar@microsoft.com>**20060323134514
974 See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26824
975]
976[commit mysteriously missing parts of "runIOFastExit" patch
977Simon Marlow <simonmar@microsoft.com>**20060321101535]
978[add runIOFastExit :: IO a -> IO a
979Simon Marlow <simonmar@microsoft.com>**20060320124333
980 Similar to runIO, but calls stg_exit() directly to exit, rather than
981 shutdownHaskellAndExit().  Needed for running GHCi in the test suite.
982]
983[Fix a broken invariant
984Simon Marlow <simonmar@microsoft.com>**20060316134151
985 Patch from #694,  for the problem "empty is an identity for <> and \$\$" is
986 currently broken by eg. isEmpty (empty<>empty)"
987]
988[Add unsafeSTToIO :: ST s a -> IO a
989Simon Marlow <simonmar@microsoft.com>**20060315160232
990 Implementation for Hugs is missing, but should be easy.  We need this
991 for the forthcoming nested data parallelism implementation.
992]
994jeanphilippe.bernardy@gmail.com**20060315143539
995 Added 'alter :: (Maybe a -> Maybe a) -> k -> Map k a -> Map k a' to IntMap and Map
997]
998[deprecate FunctorM in favour of Foldable and Traversable
999Ross Paterson <ross@soi.city.ac.uk>**20060315092942
1000 as discussed on the libraries list.
1001]
1002[Simplify Eq, Ord, and Show instances for UArray
1003Simon Marlow <simonmar@microsoft.com>**20060313142701
1004 The Eq, Ord, and Show instances of UArray were written out longhand
1005 with one instance per element type.  It is possible to condense these
1006 into a single instance for each class, at the expense of using more
1007 extensions (non-std context on instance declaration).
1008
1009 Suggestion by: Frederik Eaton <frederik@ofb.net>
1010
1011]
1012[Oops typo in intSet notMember
1013jeanphilippe.bernardy@gmail.com**20060311224713]
1015jeanphilippe.bernardy@gmail.com**20060311224502]
1016[Added notMember to Data.IntSet and Data.IntMap
1017jeanphilippe.bernardy@gmail.com**20060311085221]
1019John Meacham <john@repetae.net>**20060309191806]
1021Simon Marlow <simonmar@microsoft.com>**20060310114532
1022 fixes #588
1023]
1024[make head/build rule apply to all types, not just Bool.
1025John Meacham <john@repetae.net>**20060303045753]
1026[Avoid overflow when normalising clock times
1027Ian Lynagh <igloo@earth.li>**20060210144638]
1028[Years have 365 days, not 30*365
1029Ian Lynagh <igloo@earth.li>**20060210142853]
1030[declare blkcmp() static
1031Simon Marlow <simonmar@microsoft.com>**20060223134317]
1032[typo in comment in Foldable class
1033Ross Paterson <ross@soi.city.ac.uk>**20060209004901]
1034[simplify fmap
1035Ross Paterson <ross@soi.city.ac.uk>**20060206095048]
1036[update ref in comment
1037Ross Paterson <ross@soi.city.ac.uk>**20060206095139]
1038[Give -foverlapping-instances to Data.Typeable
1039simonpj@microsoft**20060206133439
1040
1041 For some time, GHC has made -fallow-overlapping-instances "sticky":
1042 any instance in a module compiled with -fallow-overlapping-instances
1043 can overlap when imported, regardless of whether the importing module
1044 allows overlap.  (If there is an overlap, both instances must come from
1045 modules thus compiled.)
1046
1047 Instances in Data.Typeable might well want to be overlapped, so this
1048 commit adds the flag to Data.Typeable (with an explanatory comment)
1049
1050
1051]
1052[Add -fno-bang-patterns to modules using both bang and glasgow-exts
1053simonpj@microsoft.com**20060203175759]
1054[When splitting a bucket, keep the contents in the same order
1055Simon Marlow <simonmar@microsoft.com>**20060201130427
1056 To retain the property that multiple inserts shadow each other
1057 (see ticket #661, test hash001)
1058]
1059[add foldr/build optimisation for take and replicate
1060Simon Marlow <simonmar@microsoft.com>**20060126164603
1061 This allows take to be deforested, and improves performance of
1062 replicate and replicateM/replicateM_.  We have a separate problem that
1063 means expressions involving [n..m] aren't being completely optimised
1064 because eftIntFB isn't being inlined but otherwise the results look
1065 good.
1066
1067 Sadly this has invalidated a number of the nofib benchmarks which were
1068 erroneously using take to duplicate work in a misguided attempt to
1069 lengthen their runtimes (ToDo).
1070]
1072Simon Marlow <simonmar@microsoft.com>**20060124131121
1073 Patch originally from Dinko Tenev <dinko.tenev@gmail.com>, modified
1074 to add log message by me.
1075]
1076[[project @ 2006-01-19 14:47:15 by ross]
1077ross**20060119144715
1078 backport warning avoidance from Haddock
1079]
1080[[project @ 2006-01-18 11:45:47 by malcolm]
1081malcolm**20060118114547
1082 Fix import of Ix for nhc98.
1083]
1084[[project @ 2006-01-17 09:38:38 by ross]
1085ross**20060117093838
1086 add Ix instance for GeneralCategory.
1087]
1088[TAG Initial conversion from CVS complete
1089John Goerzen <jgoerzen@complete.org>**20060112154126]
1090Patch bundle hash:
1091c82b309a4a8ddfb39e17f3b710bd33f3d1410d31