ghc.git
7 years agoBuild fix
Ian Lynagh [Fri, 29 Jun 2012 20:54:28 +0000 (21:54 +0100)] 
Build fix

7 years agoBuild fixes
Ian Lynagh [Fri, 29 Jun 2012 18:26:14 +0000 (19:26 +0100)] 
Build fixes

7 years agoDon't build the ghc DLL on Windows; works around trac #5987
Ian Lynagh [Fri, 29 Jun 2012 16:47:32 +0000 (17:47 +0100)] 
Don't build the ghc DLL on Windows; works around trac #5987

We also don't build DLLs for the dph-lifted-* packages as they depend
on ghc.

7 years agoOn Windows, detect if DLLs have too many symbols; trac #5987
Ian Lynagh [Fri, 29 Jun 2012 00:33:17 +0000 (01:33 +0100)] 
On Windows, detect if DLLs have too many symbols; trac #5987

The test isn't very pretty; it involves trawling through the
objdump -p output. I couldn't find an easier way, unfortuantely.

7 years agoMerge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Ian Lynagh [Wed, 27 Jun 2012 20:51:29 +0000 (21:51 +0100)] 
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

7 years agoAdd some more Integer rules; fixes #6111
Ian Lynagh [Wed, 27 Jun 2012 20:49:57 +0000 (21:49 +0100)] 
Add some more Integer rules; fixes #6111

7 years agoFix PA dfun construction with silent superclass args
Manuel M T Chakravarty [Wed, 27 Jun 2012 10:39:09 +0000 (20:39 +1000)] 
Fix PA dfun construction with silent superclass args

7 years agoAdd silent superclass parameters to the vectoriser
Manuel M T Chakravarty [Wed, 27 Jun 2012 03:54:12 +0000 (13:54 +1000)] 
Add silent superclass parameters to the vectoriser

7 years agoAdd silent superclass parameters (again)
Simon Peyton Jones [Sun, 27 May 2012 21:31:43 +0000 (22:31 +0100)] 
Add silent superclass parameters (again)

Silent superclass parameters solve the problem that
the superclasses of a dicionary construction can easily
turn out to be (wrongly) bottom.  The problem and solution
are described in
   Note [Silent superclass arguments] in TcInstDcls

I first implemented this fix (with Dimitrios) in Dec 2010, but removed
it again in Jun 2011 becuase we thought it wasn't necessary any
more. (The reason we thought it wasn't necessary is that we'd stopped
generating derived superclass constraints for *wanteds*.  But we were
wrong; that didn't solve the superclass-loop problem.)

So we have to re-implement it.  It's not hard.  Main features:

  * The IdDetails for a DFunId says how many silent arguments it has

  * A DFunUnfolding describes which dictionary args are
    just parameters (DFunLamArg) and which are a function to apply
    to the parameters (DFunPolyArg).  This adds the DFunArg type
    to CoreSyn

  * Consequential changes to IfaceSyn.  (Binary hi file format changes
    slightly.)

  * TcInstDcls changes to generate the right dfuns

  * CoreSubst.exprIsConApp_maybe handles the new DFunUnfolding

The thing taht is *not* done yet is to alter the vectoriser to
pass the relevant extra argument when building a PA dictionary.

7 years agoMention Generic1 in the user's guide
Jose Pedro Magalhaes [Tue, 26 Jun 2012 14:07:20 +0000 (15:07 +0100)] 
Mention Generic1 in the user's guide

7 years agoMake the GHC API a little more powerful.
David Terei [Tue, 26 Jun 2012 00:33:05 +0000 (17:33 -0700)] 
Make the GHC API a little more powerful.

7 years agotweak llvm version warning message
David Terei [Mon, 25 Jun 2012 19:17:41 +0000 (12:17 -0700)] 
tweak llvm version warning message

7 years agoNew version of the patch for #5461.
Paolo Capriotti [Mon, 25 Jun 2012 12:45:03 +0000 (13:45 +0100)] 
New version of the patch for #5461.

7 years agoFix Word64ToInteger conversion rule.
Paolo Capriotti [Mon, 25 Jun 2012 10:31:52 +0000 (11:31 +0100)] 
Fix Word64ToInteger conversion rule.

7 years agoImplemented feature request on reconfigurable pretty-printing in GHCi (#5461)
Vitaly Bragilesky [Thu, 21 Jun 2012 08:26:29 +0000 (12:26 +0400)] 
Implemented feature request on reconfigurable pretty-printing in GHCi (#5461)

7 years agoUse errorMsg over putMsg when appropriate.
David Terei [Mon, 25 Jun 2012 08:43:04 +0000 (01:43 -0700)] 
Use errorMsg over putMsg when appropriate.

7 years agoWarn if using unsupported version of LLVM.
David Terei [Mon, 25 Jun 2012 08:42:44 +0000 (01:42 -0700)] 
Warn if using unsupported version of LLVM.

7 years agoFix #6158. LLVM 3.1 doesn't like certain constructions that 3.0 and
David Terei [Mon, 25 Jun 2012 07:51:47 +0000 (00:51 -0700)] 
Fix #6158. LLVM 3.1 doesn't like certain constructions that 3.0 and
earlier did, so we avoid them.

7 years agoRemove the ID Monad
Ian Lynagh [Sat, 23 Jun 2012 01:18:22 +0000 (02:18 +0100)] 
Remove the ID Monad

We don't use it, and if we want an identity Monad then there's one
in transformers:Data.Functor.Identity that we could use.

7 years agoRemove sortLe uses
Ian Lynagh [Fri, 22 Jun 2012 22:06:38 +0000 (23:06 +0100)] 
Remove sortLe uses

7 years agoRemove sortLe
Ian Lynagh [Fri, 22 Jun 2012 21:46:03 +0000 (22:46 +0100)] 
Remove sortLe

We now use Data.List's sort(By)

7 years agoRemove another use of sortLe
Ian Lynagh [Fri, 22 Jun 2012 21:42:19 +0000 (22:42 +0100)] 
Remove another use of sortLe

7 years agoCorrect a comment
Ian Lynagh [Fri, 22 Jun 2012 21:38:28 +0000 (22:38 +0100)] 
Correct a comment

7 years agoRemove a few more sortLe's
Ian Lynagh [Fri, 22 Jun 2012 21:31:24 +0000 (22:31 +0100)] 
Remove a few more sortLe's

7 years agoRemove another sortLe use
Ian Lynagh [Fri, 22 Jun 2012 21:27:05 +0000 (22:27 +0100)] 
Remove another sortLe use

7 years agoUse a derived Ord instance for Discr
Ian Lynagh [Fri, 22 Jun 2012 21:20:14 +0000 (22:20 +0100)] 
Use a derived Ord instance for Discr

Our hand-written leAlt behaved differently when given a micture of
constructors, but I think that either it won't make a difference or
that this will be an improvement.

7 years agoDerive Eq Discr
Ian Lynagh [Fri, 22 Jun 2012 21:18:32 +0000 (22:18 +0100)] 
Derive Eq Discr

We had effectively hand-written the instance instead

7 years agoChange more uses of sortLe to sortBy
Ian Lynagh [Fri, 22 Jun 2012 20:55:49 +0000 (21:55 +0100)] 
Change more uses of sortLe to sortBy

7 years agoRemove some uses of sortLe
Ian Lynagh [Fri, 22 Jun 2012 19:48:48 +0000 (20:48 +0100)] 
Remove some uses of sortLe

Technically the behaviour of sortWith has changed, as it used
    x `le` y = get_key x < get_key y
(note "<" rather than "<="), but I assume that that was just a mistake.

7 years agoRemove some more unused functions
Ian Lynagh [Fri, 22 Jun 2012 19:27:08 +0000 (20:27 +0100)] 
Remove some more unused functions

7 years agoRemove a GHC 6.4 workaround
Ian Lynagh [Fri, 22 Jun 2012 18:40:50 +0000 (19:40 +0100)] 
Remove a GHC 6.4 workaround

7 years agoRemove 'on' from Util
Ian Lynagh [Fri, 22 Jun 2012 18:17:17 +0000 (19:17 +0100)] 
Remove 'on' from Util

We can now rely on it being available from Data.Function

7 years agoRemove some more unused function from ListSetOps
Ian Lynagh [Fri, 22 Jun 2012 18:14:56 +0000 (19:14 +0100)] 
Remove some more unused function from ListSetOps

7 years agoRemove an unused function
Ian Lynagh [Fri, 22 Jun 2012 18:03:29 +0000 (19:03 +0100)] 
Remove an unused function

7 years agoRemove duplicated comment
Jose Pedro Magalhaes [Thu, 21 Jun 2012 11:23:34 +0000 (12:23 +0100)] 
Remove duplicated comment

7 years agoAllow deriving Generic1
Jose Pedro Magalhaes [Thu, 21 Jun 2012 11:23:01 +0000 (12:23 +0100)] 
Allow deriving Generic1

This completes the support for generic programming introduced
in GHC 7.2. Generic1 allows defining generic functions that
operate on type containers, such as `fmap`, for instance.

Along the way we have fixed #5936 and #5939, allowing
deriving Generic/Generic1 for data families, and disallowing
deriving Generic/Generic1 for instantiated types.

Most of this patch is Nicolas Frisby's work.

7 years agoAdd --verbose and --help flags to gen_contents_index
Thomas Dziedzic [Thu, 21 Jun 2012 02:31:27 +0000 (21:31 -0500)] 
Add --verbose and --help flags to gen_contents_index

Fixes http://hackage.haskell.org/trac/ghc/ticket/5992

7 years agoMerge branch 'master' of http://darcs.haskell.org/ghc
Simon Peyton Jones [Thu, 21 Jun 2012 07:48:56 +0000 (08:48 +0100)] 
Merge branch 'master' of darcs.haskell.org/ghc

7 years agoRemove the USAVOURY HACK in simplifyInfer
Simon Peyton Jones [Thu, 21 Jun 2012 07:47:33 +0000 (08:47 +0100)] 
Remove the USAVOURY HACK in simplifyInfer

See the discussion in Trac #4361.  The change fixes
a regression in test IPRun.

7 years agoFix whitespace in cmm/PprCmmDecl.hs
Ian Lynagh [Wed, 20 Jun 2012 16:33:21 +0000 (17:33 +0100)] 
Fix whitespace in cmm/PprCmmDecl.hs

7 years agoRemove some more redundant Platform arguments
Ian Lynagh [Wed, 20 Jun 2012 16:32:50 +0000 (17:32 +0100)] 
Remove some more redundant Platform arguments

7 years agoRemove some more redundant Platform arguments
Ian Lynagh [Wed, 20 Jun 2012 16:19:22 +0000 (17:19 +0100)] 
Remove some more redundant Platform arguments

7 years agoRemove some redundant Platform arguments
Ian Lynagh [Wed, 20 Jun 2012 15:42:12 +0000 (16:42 +0100)] 
Remove some redundant Platform arguments

7 years agoFix whitespace in cmm/PprCmmExpr.hs
Ian Lynagh [Wed, 20 Jun 2012 15:32:51 +0000 (16:32 +0100)] 
Fix whitespace in cmm/PprCmmExpr.hs

7 years agoFix whitespace in codeGen/StgCmmGran.hs
Ian Lynagh [Wed, 20 Jun 2012 14:43:20 +0000 (15:43 +0100)] 
Fix whitespace in codeGen/StgCmmGran.hs

7 years agoMake -fgransim a dynamic flag
Ian Lynagh [Wed, 20 Jun 2012 14:42:32 +0000 (15:42 +0100)] 
Make -fgransim a dynamic flag

7 years agoMake -fparallel a dynamic flag
Ian Lynagh [Wed, 20 Jun 2012 14:31:19 +0000 (15:31 +0100)] 
Make -fparallel a dynamic flag

7 years agoFix whitespace in codeGen/CgParallel.hs
Ian Lynagh [Wed, 20 Jun 2012 14:31:06 +0000 (15:31 +0100)] 
Fix whitespace in codeGen/CgParallel.hs

7 years agoRemove some cruft from StaticFlagParser
Ian Lynagh [Wed, 20 Jun 2012 14:10:12 +0000 (15:10 +0100)] 
Remove some cruft from StaticFlagParser

Also, -read-dot-ghci is now gone. We now have -no-ignore-dot-ghci
instead.

7 years agoDefine W_TO_LONG in Cmm.h
Ian Lynagh [Wed, 20 Jun 2012 13:27:22 +0000 (14:27 +0100)] 
Define W_TO_LONG in Cmm.h

7 years agoFollow changes in base
Ian Lynagh [Tue, 19 Jun 2012 21:52:45 +0000 (22:52 +0100)] 
Follow changes in base

7 years agoMerge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Ian Lynagh [Tue, 19 Jun 2012 18:36:26 +0000 (19:36 +0100)] 
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

7 years agoFix build
Ian Lynagh [Tue, 19 Jun 2012 18:20:55 +0000 (19:20 +0100)] 
Fix build

7 years agoAdd getGCStatsEnabled function.
Paolo Capriotti [Fri, 15 Jun 2012 16:12:24 +0000 (17:12 +0100)] 
Add getGCStatsEnabled function.

7 years agoTemplate Haskell: StringPrimL now takes [Word8]
Reiner Pope [Wed, 15 Feb 2012 23:58:07 +0000 (10:58 +1100)] 
Template Haskell: StringPrimL now takes [Word8]

7 years agoCreate versioned runghc wrapper (#5873)
Paolo Capriotti [Sun, 17 Jun 2012 18:17:51 +0000 (19:17 +0100)] 
Create versioned runghc wrapper (#5873)

7 years agoBuild fixes
Ian Lynagh [Mon, 18 Jun 2012 21:08:24 +0000 (22:08 +0100)] 
Build fixes

7 years agoMove and rename opt_HiVersion
Ian Lynagh [Mon, 18 Jun 2012 20:44:52 +0000 (21:44 +0100)] 
Move and rename opt_HiVersion

It isn't really an option at all

7 years agoMake -firrefutable-tuples a dynamic flag
Ian Lynagh [Mon, 18 Jun 2012 20:57:35 +0000 (21:57 +0100)] 
Make -firrefutable-tuples a dynamic flag

7 years agoMake -ignore-dot-ghci a dynamic flag
Ian Lynagh [Mon, 18 Jun 2012 20:25:14 +0000 (21:25 +0100)] 
Make -ignore-dot-ghci a dynamic flag

7 years agoMake -dppr-cols a dynamic flag
Ian Lynagh [Mon, 18 Jun 2012 20:02:31 +0000 (21:02 +0100)] 
Make -dppr-cols a dynamic flag

7 years agoRemove redundant warning suppression in basicTypes/Literal.lhs
Ian Lynagh [Mon, 18 Jun 2012 12:11:57 +0000 (13:11 +0100)] 
Remove redundant warning suppression in basicTypes/Literal.lhs

7 years agoMake -dtrace-level a dynamic flag
Ian Lynagh [Mon, 18 Jun 2012 10:21:59 +0000 (11:21 +0100)] 
Make -dtrace-level a dynamic flag

7 years agoSwitch to using the 'rubenvb' mingw builds
Ian Lynagh [Sun, 17 Jun 2012 20:49:18 +0000 (21:49 +0100)] 
Switch to using the 'rubenvb' mingw builds

7 years agoMerge branch 'master' of http://darcs.haskell.org//ghc
Ian Lynagh [Sun, 17 Jun 2012 20:42:38 +0000 (21:42 +0100)] 
Merge branch 'master' of darcs.haskell.org//ghc

7 years agoBuild fix for Hurd.
Paolo Capriotti [Sun, 17 Jun 2012 15:28:36 +0000 (16:28 +0100)] 
Build fix for Hurd.

Patch by Samuel Thibault.

See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659530.

7 years agoMerge branch 'master' of http://darcs.haskell.org//ghc
Ian Lynagh [Sat, 16 Jun 2012 22:26:42 +0000 (23:26 +0100)] 
Merge branch 'master' of darcs.haskell.org//ghc

7 years agoMerge branch 'master' of http://darcs.haskell.org//ghc
Ian Lynagh [Sat, 16 Jun 2012 21:50:10 +0000 (22:50 +0100)] 
Merge branch 'master' of darcs.haskell.org//ghc

7 years agoMerge win:c:/m64/reg14
Ian Lynagh [Sat, 16 Jun 2012 21:38:17 +0000 (22:38 +0100)] 
Merge win:c:/m64/reg14

7 years agoFix build on win64
Ian Lynagh [Sat, 16 Jun 2012 20:40:26 +0000 (21:40 +0100)] 
Fix build on win64

7 years agoRemove a redundant import
Ian Lynagh [Sat, 16 Jun 2012 19:10:54 +0000 (20:10 +0100)] 
Remove a redundant import

7 years agoMerge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Ian Lynagh [Sat, 16 Jun 2012 19:02:50 +0000 (20:02 +0100)] 
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

7 years agoRemove a workaround for building with GHC 6.9
Ian Lynagh [Sat, 16 Jun 2012 19:02:15 +0000 (20:02 +0100)] 
Remove a workaround for building with GHC 6.9

7 years agoDon't put auto sccs on INLINE functions (#6131)
Simon Marlow [Fri, 15 Jun 2012 09:30:35 +0000 (10:30 +0100)] 
Don't put auto sccs on INLINE functions (#6131)

There was also a bug caused by INLINEs getting SCCs, but unfortunately
I have lost the test case.  The Note in the code describes the problem
though.

7 years agosmall tidyup
Simon Marlow [Thu, 1 Mar 2012 14:18:17 +0000 (14:18 +0000)] 
small tidyup

7 years agofix ticket number in comment
Simon Marlow [Tue, 12 Jun 2012 09:47:41 +0000 (10:47 +0100)] 
fix ticket number in comment

7 years agouse definition of mdo segmentation from the workshop paper
Ross Paterson [Fri, 15 Jun 2012 08:43:24 +0000 (09:43 +0100)] 
use definition of mdo segmentation from the workshop paper

7 years agoSimplify some code
Ian Lynagh [Thu, 14 Jun 2012 18:41:57 +0000 (19:41 +0100)] 
Simplify some code

We were pointlessly going from String to SDoc and back again

7 years agoMake -dppr-case-as-let a dynamic flag
Ian Lynagh [Thu, 14 Jun 2012 16:18:27 +0000 (17:18 +0100)] 
Make -dppr-case-as-let a dynamic flag

7 years agoFix ghc/ following -dppr-user-length changes
Ian Lynagh [Thu, 14 Jun 2012 16:00:44 +0000 (17:00 +0100)] 
Fix ghc/ following -dppr-user-length changes

7 years agoFix whitespace in coreSyn/PprCore.lhs
Ian Lynagh [Thu, 14 Jun 2012 15:30:53 +0000 (16:30 +0100)] 
Fix whitespace in coreSyn/PprCore.lhs

7 years agoBe strict in the DynFlags inside an SDoc
Ian Lynagh [Thu, 14 Jun 2012 15:24:32 +0000 (16:24 +0100)] 
Be strict in the DynFlags inside an SDoc

This is safe now that the tracingDynFlags is not just a call to panic.
Not sure if it was causing a problem as it was, but this change should
help make sure we don't get a chain of thunks built up inside SDocs.

7 years agoChange -dppr-user-length from a static to a dynamic flag
Ian Lynagh [Thu, 14 Jun 2012 15:20:06 +0000 (16:20 +0100)] 
Change -dppr-user-length from a static to a dynamic flag

7 years agoMerge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Ian Lynagh [Thu, 14 Jun 2012 11:46:48 +0000 (12:46 +0100)] 
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

7 years agoRename Coverage.dflags to Coverage.tte_dflags
Ian Lynagh [Thu, 14 Jun 2012 01:40:02 +0000 (02:40 +0100)] 
Rename Coverage.dflags to Coverage.tte_dflags

The record field was confusingly using the same name that the value
normally uses.

7 years agoFix whitespace in deSugar/Coverage.lhs
Ian Lynagh [Thu, 14 Jun 2012 01:17:26 +0000 (02:17 +0100)] 
Fix whitespace in deSugar/Coverage.lhs

7 years agoStop exporting, and stop using, some deprecated functions
Ian Lynagh [Wed, 13 Jun 2012 17:30:07 +0000 (18:30 +0100)] 
Stop exporting, and stop using, some deprecated functions

7 years agoUse 'ppr' rather than 'pprCLabel platform'
Ian Lynagh [Wed, 13 Jun 2012 16:58:08 +0000 (17:58 +0100)] 
Use 'ppr' rather than 'pprCLabel platform'

Means we can stop passing platform around as much.

7 years agoRemove more redundant Platform arguments
Ian Lynagh [Wed, 13 Jun 2012 16:52:00 +0000 (17:52 +0100)] 
Remove more redundant Platform arguments

7 years agoRemove more redundant Platform arguments
Ian Lynagh [Wed, 13 Jun 2012 16:36:47 +0000 (17:36 +0100)] 
Remove more redundant Platform arguments

7 years agoMerge branch 'master' of http://darcs.haskell.org/ghc
Simon Peyton Jones [Wed, 13 Jun 2012 16:26:56 +0000 (17:26 +0100)] 
Merge branch 'master' of darcs.haskell.org/ghc

7 years agoSimplify the implementation of Implicit Parameters
Simon Peyton Jones [Wed, 13 Jun 2012 16:21:09 +0000 (17:21 +0100)] 
Simplify the implementation of Implicit Parameters

This patch re-implements implicit parameters via a class
with a functional dependency:

    class IP (n::Symbol) a | n -> a where
      ip :: a

This definition is in the library module GHC.IP. Notice
how it use a type-literal, so we can have constraints like
   IP "x" Int
Now all the functional dependency machinery works right to make
implicit parameters behave as they should.

Much special-case processing for implicit parameters can be removed
entirely. One particularly nice thing is not having a dedicated
"original-name cache" for implicit parameters (the nsNames field of
NameCache).  But many other cases disappear:

  * BasicTypes.IPName
  * IPTyCon constructor in Tycon.TyCon
  * CIPCan constructor  in TcRnTypes.Ct
  * IPPred constructor  in Types.PredTree

Implicit parameters remain special in a few ways:

 * Special syntax.  Eg the constraint (IP "x" Int) is parsed
   and printed as (?x::Int).  And we still have local bindings
   for implicit parameters, and occurrences thereof.

 * A implicit-parameter binding  (let ?x = True in e) amounts
   to a local instance declaration, which we have not had before.
   It just generates an implication contraint (easy), but when
   going under it we must purge any existing bindings for
   ?x in the inert set.  See Note [Shadowing of Implicit Parameters]
   in TcSimplify

 * TcMType.sizePred classifies implicit parameter constraints as size-0,
   as before the change

There are accompanying patches to libraries 'base' and 'haddock'

All the work was done by Iavor Diatchki

7 years agoRemove some more Platform arguments
Ian Lynagh [Wed, 13 Jun 2012 16:20:46 +0000 (17:20 +0100)] 
Remove some more Platform arguments

7 years agoRemove more unused Platform arguments
Ian Lynagh [Wed, 13 Jun 2012 15:44:55 +0000 (16:44 +0100)] 
Remove more unused Platform arguments

7 years agoRemove some unnecessary platform arguments
Ian Lynagh [Wed, 13 Jun 2012 15:38:27 +0000 (16:38 +0100)] 
Remove some unnecessary platform arguments

7 years agoAdd missing file
Ian Lynagh [Wed, 13 Jun 2012 12:47:25 +0000 (13:47 +0100)] 
Add missing file

7 years agoFollow spelling fixes
Ian Lynagh [Wed, 13 Jun 2012 12:16:06 +0000 (13:16 +0100)] 
Follow spelling fixes

7 years agoMerge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
Ian Lynagh [Wed, 13 Jun 2012 12:14:41 +0000 (13:14 +0100)] 
Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc

Fix conflicts in:
compiler/main/DynFlags.hs

7 years agoRemove lots of commented out 'in' keywords
Ian Lynagh [Wed, 13 Jun 2012 12:06:03 +0000 (13:06 +0100)] 
Remove lots of commented out 'in' keywords

7 years agoTweak the way UsageErrors are constructed
Ian Lynagh [Wed, 13 Jun 2012 11:59:06 +0000 (12:59 +0100)] 
Tweak the way UsageErrors are constructed

Using 'unlines' meant that we get a trailing newline, which gave
different output.