GHC and dynamic linking

2007-11-11 Thread Richard Giraud
I foggily remember previous versions of GHC being unable to create 
programs that use dynamic links to libraries.  Is this the case and, if 
so, is it still an issue?  Static linking is not an option due to 
licensing issues.


I'm interested in GHC 6.6.1 and 6.8.1 on Windows, Mac (PowerPC and x86), 
and Linux (x86).


Thanks in advance,

Richard
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Voldermort

I've entered a feature request for this on Trac
http://hackage.haskell.org/trac/ghc/ticket/1866
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Barney Hilken
I think this would be a BIG mistake. Whatever system GHC settles on  
is almost certain to become part of the Haskell standard, and this  
particular system has some deep limitations which could not be got  
round without ripping it all out and starting again.


The problem with this (and other Flex-like) systems is that they  
take record extension as the basic operation of record building,  
rather than record merging. This means that you can only ever add or  
update statically determined fields of a given record.


An important application which is made impossible by this approach is  
functions with optional arguments. For example, if you look at the  
definition of R (the statistics system) every function has a small  
number of mandatory positional arguments, and a very large number of  
optional named arguments, which take sensible default values. I want  
to be able to write:


f opts x = let vals = {Opt1 =: default1, ... } |: opts in
... vals ... x ...

where '{Opt1 =: default1, ... }' is some fixed record of default  
values, and '|:' is record overwrite. The type of f should be


f :: (a `Subrecord` {Opt1 :=: t1, ...}) = a - b - c

where '{Opt1 :=: t1, ...}' is the (fixed) type of '{Opt1 =:  
default1, ... }' (and x::b, and c is the type of the result).


The condition 'a `Subrecord` {Opt1 :=: t1, ...}' in the context of  
this type means that every field of 'opts :: a' must be a field of  
'{Opt1 :=: t1, ...}', but opts can have as few fields as you like.  
This is exactly what you want for optional arguments.


This could never be defined in any Flex-like system, because these  
systems depend on the fact that their record types can be reduced to  
a type variable extended by a fixed set of labels. This is a major  
restriction to what you can do with them: you can never define  
operations like '|:' or '+:' where the second argument does not have  
a constant set of fields.


This restriction does not hold for more flexible systems like that  
defined by Oleg  co using functional dependencies, or the one I  
proposed on this list using type families. Although these systems are  
much more flexible than the scoped labels system, they would take  
LESS work to add to GHC because they have less built-in syntax, and  
are almost entirely defined in a library.


I second the call for a records system, but please don't limit us to  
something like scoped labels!


Barney.

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: ANNOUNCE: GHC version 6.8.1

2007-11-11 Thread Duncan Coutts
On Sat, 2007-11-10 at 21:45 +, Ian Lynagh wrote:
 Hi Philip,
 
 On Mon, Nov 05, 2007 at 09:58:40AM +0100, Philip K.F. Hölzenspies wrote:
  
  Booting libraries/base
  Booting libraries/directory
  /usr/share/aclocal/progsreiserfs.m4:13: warning: underquoted definition of 
  AC_CHECK_LIBREISERFS
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
 
 I still don't understand why this would happen.

That's not a problem in GHC's configure.ac or other .ac files. It's just
that autoreconf scans all the /usr/share/aclocal/*.m4 files that you
happen to have installed on your system. If any of those are from before
autoconf started getting really picky about quoting then you'll get that
warning. It's nothing to worry about, especially as in this case it's in
a .m4 file that we do not get any definitions from.

Duncan
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re[2]: Extensible Records

2007-11-11 Thread Bulat Ziganshin
Hello Barney,

Sunday, November 11, 2007, 2:34:14 PM, you wrote:
 An important application which is made impossible by this approach is

i propose to start Records project by composing list of
requirements/applications to fulfill; we can keep it on Wiki page.
this will create base for language theorists to investigate various
solutions. i think they will be more motivated seeing our large
interest in this extension


-- 
Best regards,
 Bulatmailto:[EMAIL PROTECTED]

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: ANNOUNCE: GHC version 6.8.1

2007-11-11 Thread Ian Lynagh
On Sun, Nov 11, 2007 at 11:59:43AM +, Duncan Coutts wrote:
 On Sat, 2007-11-10 at 21:45 +, Ian Lynagh wrote:
  Hi Philip,
  
  On Mon, Nov 05, 2007 at 09:58:40AM +0100, Philip K.F. Hölzenspies wrote:
   
   Booting libraries/base
   Booting libraries/directory
   /usr/share/aclocal/progsreiserfs.m4:13: warning: underquoted definition 
   of AC_CHECK_LIBREISERFS
 run info '(automake)Extending aclocal'
 or see 
   http://sources.redhat.com/automake/automake.html#Extending-aclocal
  
  I still don't understand why this would happen.
 
 That's not a problem in GHC's configure.ac or other .ac files. It's just
 that autoreconf scans all the /usr/share/aclocal/*.m4 files that you
 happen to have installed on your system. If any of those are from before
 autoconf started getting really picky about quoting then you'll get that
 warning. It's nothing to worry about, especially as in this case it's in
 a .m4 file that we do not get any definitions from.

So why doesn't booting base cause it?


Thanks
Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


missing Control.Monad.State

2007-11-11 Thread Hal Daume III

Hi all --

Something weird just happened and I feel bad asking on the list for help
(because it's a dumb question), but I've racked my brains and can't
figure it out.

I've been happily using ghc for some time now.  My current machine died,
and the computer folks gave me a new one.  Both my old and new were
running ubuntu.  The new machine came in and I apt-get installed ghc6
ghc6-prof ghc6-docs haskell-mode ghc6-libsrc.  But when I try to run ghc
on a module that uses Control.Monad.State, I get:


~ ghc --make -fglasgow-exts Main.hs -o hbc
Core.hs:24:7:
Could not find module `Control.Monad.State':
  Use -v to see a list of the files searched for.

If I say -v, I get:

Glasgow Haskell Compiler, Version 6.6, for Haskell 98, compiled by GHC
version 6.6
Using package config file: /usr/lib/ghc-6.6/package.conf
wired-in package base mapped to base-2.0
wired-in package rts mapped to rts-1.0
wired-in package haskell98 mapped to haskell98-1.0
wired-in package template-haskell mapped to template-haskell-2.0
Hsc static flags: -static
*** Chasing dependencies:
Chasing modules from: Main.hs

Core.hs:24:7:
Could not find module `Control.Monad.State':
  locations searched:
Control/Monad/State.hs
Control/Monad/State.lhs
*** Deleting temp files:
Deleting:
*** Deleting temp dirs:
Deleting:


Looking in /usr/lib/ghc-6.6/package.conf, I don't find any mention of
Control.Monad.State (or anything with State) for that matter.  A
find in /usr/lib/ghc-6.6 doesn't turn up anything called State, either.

I presume that I'm doing something incredibly stupid, but I'd appreciate
a bit of help!

Thanks!

 - Hal


--
 Hal Daume III --- me AT hal3 DOT name  |  http://hal3.name
 Arrest this man, he talks in maths.  |  http://nlpers.blogspot.com

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Binary for Vista 64-bit

2007-11-11 Thread Chris Saunders
Just wondering if a binary for Vista 64-bit will be released?

 

Regards

Chris Saunders

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: GHC 6.8.1 on Mac OS X 10.5 (Leopard)

2007-11-11 Thread Ian Lynagh
On Tue, Nov 06, 2007 at 05:29:05PM +1100, Manuel M T Chakravarty wrote:
 A full binary distribution of GHC 6.8.1 for Mac OS X 10.5 (Leopard) is  
 available

Thanks Manuel! I've put it on the download page.


Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: GHC 6.8.1 on Mac OS X 10.4 (Tiger)

2007-11-11 Thread Ian Lynagh
On Thu, Nov 08, 2007 at 12:25:12PM +0100, Christian Maeder wrote:
 
 binary distributions of GHC 6.8.1 for Mac OS X 10.4 (Tiger)

Thanks Christian! I've put them on the download page.


Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: ghc-6.8.1 under Solaris

2007-11-11 Thread Ian Lynagh
On Fri, Nov 09, 2007 at 12:46:14PM +0100, Christian Maeder wrote:
 Dear Solaris Users,
 
 binary distributions for Solaris 10 ultrasparc and i383

Thanks Christian! I've put them on the download page.


Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: missing Control.Monad.State

2007-11-11 Thread Alfonso Acosta
It seems you haven't the mtl package installed.

You can either get a custom package for your OS distribution or grab
it from hackage.



On Nov 11, 2007 2:29 PM, Hal Daume III [EMAIL PROTECTED] wrote:
 Hi all --

 Something weird just happened and I feel bad asking on the list for help
 (because it's a dumb question), but I've racked my brains and can't
 figure it out.

 I've been happily using ghc for some time now.  My current machine died,
 and the computer folks gave me a new one.  Both my old and new were
 running ubuntu.  The new machine came in and I apt-get installed ghc6
 ghc6-prof ghc6-docs haskell-mode ghc6-libsrc.  But when I try to run ghc
 on a module that uses Control.Monad.State, I get:


 ~ ghc --make -fglasgow-exts Main.hs -o hbc
 Core.hs:24:7:
  Could not find module `Control.Monad.State':
Use -v to see a list of the files searched for.

 If I say -v, I get:

 Glasgow Haskell Compiler, Version 6.6, for Haskell 98, compiled by GHC
 version 6.6
 Using package config file: /usr/lib/ghc-6.6/package.conf
 wired-in package base mapped to base-2.0
 wired-in package rts mapped to rts-1.0
 wired-in package haskell98 mapped to haskell98-1.0
 wired-in package template-haskell mapped to template-haskell-2.0
 Hsc static flags: -static
 *** Chasing dependencies:
 Chasing modules from: Main.hs

 Core.hs:24:7:
  Could not find module `Control.Monad.State':
locations searched:
  Control/Monad/State.hs
  Control/Monad/State.lhs
 *** Deleting temp files:
 Deleting:
 *** Deleting temp dirs:
 Deleting:


 Looking in /usr/lib/ghc-6.6/package.conf, I don't find any mention of
 Control.Monad.State (or anything with State) for that matter.  A
 find in /usr/lib/ghc-6.6 doesn't turn up anything called State, either.

 I presume that I'm doing something incredibly stupid, but I'd appreciate
 a bit of help!

 Thanks!

   - Hal


 --
   Hal Daume III --- me AT hal3 DOT name  |  http://hal3.name
   Arrest this man, he talks in maths.  |  http://nlpers.blogspot.com

 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: GHC and dynamic linking

2007-11-11 Thread Ian Lynagh
On Sun, Nov 11, 2007 at 02:01:30AM -0700, Richard Giraud wrote:
 I foggily remember previous versions of GHC being unable to create 
 programs that use dynamic links to libraries.

Dynamic linking to C libraries works fine.

Support is patchy for Haskell libraries in GHC 6.8.1; the plan is for
GHC 6.10 to support them properly.


Thanks
Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: missing Control.Monad.State

2007-11-11 Thread Ian Lynagh
On Sun, Nov 11, 2007 at 06:29:36AM -0700, Hal Daume III wrote:
 
 running ubuntu.  The new machine came in and I apt-get installed ghc6
 ghc6-prof ghc6-docs haskell-mode ghc6-libsrc.

You probably need libghc6-mtl-dev.


Thanks
Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Build failures making GHC 6.8.1 on PPC Mac Os X 10.5

2007-11-11 Thread Ian Lynagh
On Fri, Nov 09, 2007 at 08:21:09PM -0800, Corey O'Connor wrote:
 
 Anytime I see the linker crash I get nervous. Any clues on where to start
 debugging?

Is it deterministic? A hardware fault, e.g. bad RAM, seems likely to me.


Thanks
Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Ian Lynagh
On Sat, Nov 10, 2007 at 11:24:24PM +, Voldermort wrote:

 I assume that porting an existing implementation would 
 be much easier than starting from scratch.

I doubt this is true, but even if it is I would prefer to see features
chosen based on their merits.

(I'm not familiar with the various proposals, so I can't say anything
about this one)


Thanks
Ian

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Build failures making GHC 6.8.1 on PPC Mac Os X 10.5

2007-11-11 Thread Chris Kuklewicz
Ian Lynagh wrote:
 On Fri, Nov 09, 2007 at 08:21:09PM -0800, Corey O'Connor wrote:
 Anytime I see the linker crash I get nervous. Any clues on where to start
 debugging?
 
 Is it deterministic? A hardware fault, e.g. bad RAM, seems likely to me.
 
 
 Thanks
 Ian

I got the same Bus Error in compiling Parsec (as part of extralibs) with OS X
10.5 / XCode 3.0 on a single G4 ppc computer (powerbook).

I fear the new Apply toolchain is choking on something, possible split-objs?

-- 
Chris Kuklewicz
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Stefan O'Rear
On Sun, Nov 11, 2007 at 03:02:56PM +0300, Bulat Ziganshin wrote:
 Hello Barney,
 
 Sunday, November 11, 2007, 2:34:14 PM, you wrote:
  An important application which is made impossible by this approach is
 
 i propose to start Records project by composing list of
 requirements/applications to fulfill; we can keep it on Wiki page.
 this will create base for language theorists to investigate various
 solutions. i think they will be more motivated seeing our large
 interest in this extension

+1

Stefan


signature.asc
Description: Digital signature
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Claus Reinke
Whatever system GHC settles on  
is almost certain to become part of the Haskell standard, and this  
particular system has some deep limitations which could not be got  
round without ripping it all out and starting again.


i'd like to have extensible records, but i'd rather like to decompose
this complex language feature into its components, and then have
better support for each of those components, which will be simpler,
could be combined to support different record system variants, and 
are likely to have other applications.


in light of this, what library-based record proposals have to offer
are light-weight case studies of useability and feature composition.

once we know which kind of record system we want, we can then
think about which parts of it need better language and implementation
support. even before we converge on any specific system, there
might be features that are shared by all contending proposals.

some time ago (was that really 2 years? trac claims it was), i 
suggested that any record system with first-class labels needs

language support for type sharing: if i import modules A and B,
each of which introduces a record-label X, i need some way of
telling the type system that A.X ~ B.X (Trex solved that problem
by not requiring label declarations at all, but Trex labels weren't
first-class objects, either).

i made a haskell prime ticket for it (which was duly classified
as maybe and then ignored;-), to which i also attached an
implementation of records that, in contrast to other record
libraries, does not depend on label ordering, as an illustration:

   http://hackage.haskell.org/trac/haskell-prime/ticket/92
   
http://hackage.haskell.org/trac/haskell-prime/attachment/ticket/92/Data.Record.hs

the code was inspired by Daan's system, i think, because not
removing label overlap made the type class hacking a lot easier,
but went slightly beyond in supporting record concatenation

(i've been waiting for type functions to support overlap
resolution, so that i can port the code; the fact that this is
still future work supports the argument that haskell'2006
should have appeared with a functional dependencies
addendum instead of waiting for better things to happen?-):

  poor man's records using nested tuples and declared labels:

  apart from record extension (,), we've got field selection (#?), 
  field removal (#-), field update (#!), field renaming (#@),

  symmetric record concatenation (##), .. anything missing?

  see main at the bottom for examples of use.

  submitted to support proposal for first class labels in Haskell'.

  Claus Reinke, February 2006

i just downloaded the old Data.Record code and it still loads
and runs in a recent ghc head, giving examples of all operations
(these days, one might want to clean up the syntax with some 
infix constructors, but at the time i was still hoping to get it to 
work in hugs as well..):


   *Data.Record main
   
   records
   
   r1 : ((A,True),((B,'a'),((C,1),(

   r2 : ((A,False),((B,'b'),((C,2),((A,True),((B,'a'),((C,1),()))
   r3 : ((D,hi there),((B,[who's calling]),()))
   
   symmetric record concatenation
   
   r4a = r1 ## r3:

   ((A,True),((B,'a'),((C,1),((D,hi there),((B,[who's 
calling]),())
   r4b = r3 ## r1:
   ((D,hi there),((B,[who's 
calling]),((A,True),((B,'a'),((C,1),())
   
   record selection
   
   
   x1 r = (r #? B, r #? C, r #? A)
   
   x1 r1: ('a',1,True)

   x1 r2: ('b',2,False)
   x1 r4a: ('a',1,True)
   x1 r4b: ([who's calling],1,True)
   
   x2 r = (r #? B, r #? D)
   
   x2 r4a: ('a',hi there)

   x2 r4b: ([who's calling],hi there)
   
   record field removal
   
   
   x3 r = r #- D #- B
   
   x3 r1: ((A,True),((C,1),()))

   x3 r2: ((A,False),((C,2),((A,True),((B,'a'),((C,1),())
   x3 r3: ()
   x3 r4a: ((A,True),((C,1),((B,[who's calling]),(
   x3 r4b: ((A,True),((B,'a'),((C,1),(
   
   record field update
   
   
   (r2 #! B) dingbats:

   ((B,dingbats),((A,False),((C,2),((A,True),((B,'a'),((C,1),()))
   
   record field renaming
   
   
   (r2 #@ D) C:

   ((D,2),((A,False),((B,'b'),((A,True),((B,'a'),((C,1),()))


 f opts x = let vals = {Opt1 =: default1, ... } |: opts in
 ... vals ... x ...

where '{Opt1 =: default1, ... }' is some fixed record of default  
values, and '|:' is record overwrite. The type of f should be


 f :: (a `Subrecord` {Opt1 :=: t1, ...}) = a - b - c


in Hugs' Trex that would be:

Hugs.Trex :t let f opts x = (opt1=default|opts) in f
let {...} in f :: a\opt1 = Rec a - b - Rec (opt1 :: [Char] | a)

but that still doesn't give you things like record concatenation.
in principle, the record-concatenation-for-free trick works with
Trex, but it falls apart if you need to define type classes involving
record types. because then you need to be specific about the
types, making those labels explicit. (btw, what is Flex-like?)

claus

___
Glasgow-haskell-users mailing list

Re: Extensible Records

2007-11-11 Thread Barney Hilken


Hugs.Trex :t let f opts x = (opt1=default|opts) in f
let {...} in f :: a\opt1 = Rec a - b - Rec (opt1 :: [Char] | a)


This completely loses the aim of optional arguments: with this type,  
the argument 'opts' cannot have a field 'opt1' (as shown by the  
context 'a\opt1'). The type we want should say that 'opts' cannot  
have any fields except 'opt1' (though that is optional). Flex cannot  
express this type.



 (btw, what is Flex-like?)


What I meant by Flex-like systems is that they can only extend  
record types by fixed fields. As well as the usual extraction and  
deletion of fields, I want first-class operators:


(+:) :: r `Disjoint` s = r - s - r :+: s
	x +: y is the concatenation of two records x and y, under the  
condition that they have no fields in common

r :+: s is the type of x +: y, assuming x::r and y::s

(|:) :: r `Subrecord` s = s - r - s
	x |: y is the update of x by y, under the condition that every field  
of y is a field of x of the same type

the type of x |: y is the same as the type of x

The conditions on the types of these operators are important, as they  
catch common errors. For example, if a function 'f' has optional  
arguments 'opt1::x1, ... optn::xn' you want 'f {optt1 = val}' to give  
a type error because you've misspelled 'opt1', not simply to ignore  
it. In other words, you need a condition that the fields of the  
record argument of f are a subset of {opt1, .., optn}.


These operators can be defined using type families: download the code  
from

http://homepage.ntlworld.com/b.hilken/files/Records.hs
This code would only need minimal extensions to GHC to make it  
completely useable.




some time ago (was that really 2 years? trac claims it was), i
suggested that any record system with first-class labels needs
language support for type sharing: if i import modules A and B,
each of which introduces a record-label X, i need some way of
telling the type system that A.X ~ B.X (Trex solved that problem
by not requiring label declarations at all, but Trex labels weren't
first-class objects, either).


I believe this issue is completely independent of records. Exactly  
the same problem would arise if the same datatype with the same  
constructors was defined in two different modules. To solve this we  
need a mechanism whereby identically defined types in different  
modules can be identified.



i propose to start Records project by composing list of
requirements/applications to fulfill; we can keep it on Wiki page.
this will create base for language theorists to investigate various
solutions. i think they will be more motivated seeing our large
interest in this extension


I am happy to contribute to this, but I am strongly biased in favour  
of my own records system!


Barney.

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Binary for Vista 64-bit

2007-11-11 Thread Bulat Ziganshin
Hello Chris,

Sunday, November 11, 2007, 4:57:39 PM, you wrote:

 Just wondering if a binary for Vista 64-bit will be released?

i've asked here June 19. Simon Marlow asked:

The main thing standing in the way of this is the lack of a 64-bit port of
mingw.  The latest status update I could find is here:

 http://sourceforge.net/mailarchive/message.php?msg_id=460D8FC1.64E689DB%40dessent.net

you can see whole thread for details


-- 
Best regards,
 Bulatmailto:[EMAIL PROTECTED]

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Extensible Records

2007-11-11 Thread Claus Reinke

Hugs.Trex :t let f opts x = (opt1=default|opts) in f
let {...} in f :: a\opt1 = Rec a - b - Rec (opt1 :: [Char] | a)


This completely loses the aim of optional arguments: with this type,  
the argument 'opts' cannot have a field 'opt1' (as shown by the  
context 'a\opt1'). The type we want should say that 'opts' cannot  
have any fields except 'opt1' (though that is optional). Flex cannot  
express this type.


ok, then i misunderstood what you wanted to demonstrate with
that example. but then this part doesn't seem to need any extensible
records at all, in fact 'cannot have any fields except' requires non-
extensibility. the standard type for optional things is Maybe thing, 
and if you want a record of optional things, a record with default 
value Nothing in each field, updated only on the fields you want

to pass a value in, will do fine.

What I meant by Flex-like systems is that they can only extend  
record types by fixed fields. 


thanks, i find the explanation more helpful than the name.
there are already too many variations around, so unless there
is a concrete implementation/specification, as in the case of 
Trex, Daan's system (i think he actually had several, so i should
say 'Daan's scoped labels'), or Oleg's, your's and my libraries, 
it might be better to specify the features.


As well as the usual extraction and  
deletion of fields, I want first-class operators:


(+:) :: r `Disjoint` s = r - s - r :+: s
x +: y is the concatenation of two records x and y, under the  
condition that they have no fields in common

r :+: s is the type of x +: y, assuming x::r and y::s


this is a fairly complex operation, part of which includes a
generalisation of the 'lacks' predicate in Trex to sets of labels, 
to catch common errors at the price of additional complexity.


until i saw Daan's system, i would have agreed that this kind
of disjointness/lacks guarantee was necessary for a useable
record type system, but i'm no longer convinced that the 
additional complexity (not just in implementation, but in types)
is worth it. but that is just one example of why we might 
need several design alternatives - no single system to please

everyone all the time!-)


(|:) :: r `Subrecord` s = s - r - s
x |: y is the update of x by y, under the condition that every field  
of y is a field of x of the same type

the type of x |: y is the same as the type of x


i agree that something like this is useful (i should add it to
my own code some time).

The conditions on the types of these operators are important, as they  
catch common errors. For example, if a function 'f' has optional  
arguments 'opt1::x1, ... optn::xn' you want 'f {optt1 = val}' to give  
a type error because you've misspelled 'opt1', not simply to ignore  
it. In other words, you need a condition that the fields of the  
record argument of f are a subset of {opt1, .., optn}.


again, that is achievable even with haskell's labelled fields, as it
specifically rules out record extension as a programmer error.

for a full record system, there are two parts of the problem:
- opening closed record types to extension
- closing extensible record types to prevent extension

you argue that the second step is necessary, and suggest a 
generalisation of systems like Trex, Daan argued that a 
surprisingly large subset of practical problems can be 
addressed with the first step alone.


since the second step isn't entirely for free (those 'lacks'
and 'Disjoint' predicates keep piling up), there is something
to be said for offering both the step 1 and the step 1+2
systems.

there are several other features in which both kinds of
system go beyond haskell's labelled fields, but many of
those we might be able to agree on?-)

These operators can be defined using type families: download the code  
from

http://homepage.ntlworld.com/b.hilken/files/Records.hs
This code would only need minimal extensions to GHC to make it  
completely useable.


i still have your original announcement in my inbox!-) i just
haven't got around to it yet, because i wanted to translate
my own system to type functions first, and other things keep
getting in the way..

.. (type sharing).. 
I believe this issue is completely independent of records. Exactly  
the same problem would arise if the same datatype with the same  
constructors was defined in two different modules. To solve this we  
need a mechanism whereby identically defined types in different  
modules can be identified.


indeed. record labels just raise the urgency of the issue as
a real problem in programming practice.


but I am strongly biased in favour of my own records system!


who isn't?-) that is exactly why none of the systems have made
it into haskell so far. and why we should allow for multiple options
if we want to go any further than the numerous previous attempts.

claus

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org

Re: Extensible Records

2007-11-11 Thread Voldermort

Bulat Ziganshin wrote:
 i propose to start Records project by composing list of
 requirements/applications to fulfill; we can keep it on Wiki page.

Wiki page duly created
http://hackage.haskell.org/trac/ghc/wiki/ExtensibleRecords
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: ANNOUNCE: GHC version 6.8.1

2007-11-11 Thread Philip K . F . Hölzenspies
Dear Ian, Duncan, all,

Thank you for looking into the build failure. I actually expected that
the autoconf warning didn't really matter, since I couldn't imagine
any ReiserFS dependency being critical.

The other error is actually quite a lot more weird and critical, for
it stops the build.

Regards,
Philip
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Build failures making GHC 6.8.1 on PPC Mac Os X 10.5

2007-11-11 Thread Corey O'Connor
Split objects does seem to be the source of the crash. With it disabled the
compile of Parsec succeeds but linking of System fails due to unknown
scattered relocation type 4.

I decided to compile the ld tool with debugging to see if I can get more
information when ld crashes. Here's what I've found out so far:

The ld executable used is actually from the ld64 project and not the cctools
project. The cctools' ld is installed as ld_classic on OS X. In theory this
should be the same linker as on Tiger and could be used instead of the ld
from ld64. That might be a good workaround till ld is fixed: Update ghc's
SysTools to use ld_classic instead of ld.

1. Once ld from ld64 is compiled for debug swap out the production ld with
the version with debug symbols.
2. ulimit -c unlimited
3. Run ghc's make once again.
4. Load the core dump in GCC

This gives the interesting back trace:
#0  0x000222ac in ObjectFile::Section::getBaseAddress (this=0x0) at
ObjectFile.h:182
#1  0x000224a0 in ObjectFile::Atom::getAddress (this=0x6decb0) at
ObjectFile.h:269
#2  0x000c3a30 in mach_o::executable::Writerppc::addObjectRelocs_powerpc
(this=0x6f65a0, atom=0x6dea30, ref=0x6f34a0) at MachOWriterExecutable.hpp
:2742
#3  0x0001309c in mach_o::executable::Writerppc::addObjectRelocs
(this=0x6f65a0, atom=0x6dea30, ref=0x6f34a0) at MachOWriterExecutable.hpp
:2678
#4  0x001ab3e4 in mach_o::executable::Writerppc::buildObjectFileFixups
(this=0x6f65a0) at MachOWriterExecutable.hpp:3065
#5  0x001be094 in mach_o::executable::Writerppc::buildFixups
(this=0x6f65a0) at MachOWriterExecutable.hpp:2398
#6  0x001be108 in mach_o::executable::Writerppc::buildLinkEdit
(this=0x6f65a0) at MachOWriterExecutable.hpp:1834
#7  0x001be238 in mach_o::executable::Writerppc::write (this=0x6f65a0,
[EMAIL PROTECTED], [EMAIL PROTECTED], entryPointAtom=0x0,
dyldHelperAtom=0x0, createUUID=false, canScatter=false,
cpuConstraint=ObjectFile::Reader::kCpuAny, biggerThanTwoGigs=false) at
MachOWriterExecutable.hpp:1814
#8  0xfec4 in Linker::writeOutput (this=0xbffef608) at
/Users/coconnor/Development/External_projects/Darwin/ld64-77/src/ld.cpp:2700
#9  0x0001f5b0 in Linker::link (this=0xbffef608) at
/Users/coconnor/Development/External_projects/Darwin/ld64-77/src/ld.cpp:585
#10 0x0002113c in main (argc=465, argv=0xbffefb88) at
/Users/coconnor/Development/External_projects/Darwin/ld64-77/src/ld.cpp:3568

Looks like a NULL pointer dereference. Why the pointer is NULL I don't know
but that's what I have so far.

-Corey

On Nov 11, 2007 7:33 AM, Chris Kuklewicz [EMAIL PROTECTED]
wrote:

 Ian Lynagh wrote:
  On Fri, Nov 09, 2007 at 08:21:09PM -0800, Corey O'Connor wrote:
  Anytime I see the linker crash I get nervous. Any clues on where to
 start
  debugging?
 
  Is it deterministic? A hardware fault, e.g. bad RAM, seems likely to me.
 
 
  Thanks
  Ian

 I got the same Bus Error in compiling Parsec (as part of extralibs) with
 OS X
 10.5 / XCode 3.0 on a single G4 ppc computer (powerbook).

 I fear the new Apply toolchain is choking on something, possible
 split-objs?

 --
 Chris Kuklewicz




-- 
-Corey O'Connor
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


IArray (IOToDiffArray IOUArray) Bool : Why it doesn't exist ?

2007-11-11 Thread Chaddaï Fouché
IOUArray Bool exists, and is even a bits array in reality (which makes
it really efficient), is there any reason that DiffUArray Bool can't
exist ?

-- 
Jedaï
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users