Re: [Haskell-cafe] Type inference

2006-02-09 Thread Brian Hulley

Cale Gibbard wrote:

On 09/02/06, Brian Hulley [EMAIL PROTECTED] wrote:

Brian Hulley wrote:

f :: forall m. (forall a. a-m a) - c - d - (m c, m d)


Of course this type doesn't work on your original example, since (,)
is a type constructor with two parameters, not one, but this type
signature does actually work just fine in GHC.

---
data Pair x = Pair x x deriving Show
data Id x = Id x deriving Show

f :: forall m c d. (forall a. a - m a) - c - d - (m c, m d)
f g x y = (g x, g y)
---
*Main f (\x - Pair x x) 3 hello
(Pair 3 3,Pair hello hello)
*Main f (\x - Id x) 3 hello
(Id 3,Id hello)


Perhaps in practice this kind of workaround is sufficient, although this 
requires you to put the results into a form that can be syntactically 
matched against m a.


I wonder though if it would be possible to have a type system that would 
work for my original example by automatically creating internal declarations 
type T1 a = (a,a)  and type T2 a = a so that m would match against T1 and T2 
respectively.


It is difficult to know if this would be a worthwhile thing to do or if most 
practical applications of polymorphism in any case involve transformations 
whose shape can be captured sufficiently with multi-param typeclasses etc.


Regards, Brian


___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] FFI question

2006-02-09 Thread Esa Ilari Vuokko
On 2/9/06, Frederico Franzosi [EMAIL PROTECTED] wrote:

Hi,

I don't really know how this stuff exactly works, but here's few
things I have found useful when I ran into this sort of problems.

 I'm developping a package wich imports C functions.

 For example if I use:
 $ghc -package PKGname-PKGversion -fffi -o main Main.hs -llib

 it gives an error message (undefined references of objects from PKG to
 functions in lib)

I don't have exact answer, but ghc uses ld under the hood and sometimes
the order of libraries on ld command line matters.  Here's few things that
might be useful if that's the case.

Use ghc -v and find final link ld/gcc (I don't recall which one ghc invokes
for linking) and try that line yourself, you can also move libraries up on
list etc to find what order you actually need.

Add -llib to the options in package.conf as a library- try adding as first
and try adding as last.  Try both ;-)  Try adding as object file, ie
/path/to/lib.a

Order of arguments  on ghc command line doesn't matter so much, because
ghc will put (if I recall correctly) package libraries first and then
add -llib and
such options to the end on the ld command line- so it's pretty hard to work
around the problem just by invoking ghc different way.

 $ghc -fffi -o main Main.hs -llib /path/to/PKGlib.a

 it compiles correctly.


 and also when I do:

 $ghc -package PKGname-PKGversion -fffi -o main Main.hs /path/to/lib.a

If I were to guess these work because /path/to/lib.a is handled as an
object file, which is somehow different from being library.  I have no knowledge
what and why there is this sort of magic restrictions.

HTH,
-Esa
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Elementary HaXml question

2006-02-09 Thread Koen . Roelandt

Hi all,

I'm new to Haskell and HaXml and I'm playing around
with the latter to clean some (well-formed) 'legacy' html. This works fine
except for the following cases. Some of the elements to be cleaned are:

font size=4iHello
World/i/font
ifont
size=4Hello World/font/i

This should become:

h1 class=subtitleHello
World/h1

I can build filters to find font, font
size=4 or i, but the combination does not seem
to work.
From what I could gather from the documentation, it
should be something like:

foldXml (txt ?
keep :
 
  (attrval(size,AttValue[Left 4])
`o` tag font) / tag i ? replaceTag h1
   :
 
   children)

This doesn't work. I am clearly missing something
elementary here, so any hints are welcome.

Cheers,

K.




___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: FFI question

2006-02-09 Thread Simon Marlow

Frederico Franzosi wrote:

I'll try to make it short.

I'm developping a package wich imports C functions.

the fact is that when I try to compile if I call the compiler in the
usual way, using -package and -llib it gives an undefined reference
error...

For example if I use:
$ghc -package PKGname-PKGversion -fffi -o main Main.hs -llib

it gives an error message (undefined references of objects from PKG to
functions in lib)


but if I use:

$ghc -fffi -o main Main.hs -llib /path/to/PKGlib.a

it compiles correctly.


It looks like -llib is appearing earlier on the linker's command line 
than the library from your package, when you use -package.  You haven't 
specified a dependency between the two, so GHC is making an arbitrary 
choice.


The right way to fix this, if your package depends on a library, is to 
include that library in the extra-libraries field of the package.


Cheers,
SImon
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Type inference

2006-02-09 Thread Andreas Rossberg

Brian Hulley wrote:

Fred Hosch wrote:

Is type inferencing in Haskell essentially the same as in SML?


The most significant difference certainly is that type inference has 
been beefed up with type classes in Haskell, which are quite a powerful 
mechanism refining Hindley/Milner inference.


Besides that, Haskell allows some additional programs for which types 
can /not/ be inferred (e.g. the examples Brian was giving), while SML 
does not.


SML also has a complicated thing called the value restriction because 
it allows mutable references to be altered via side effects. Because 
Haskell has no side effects, there is no need for a value restriction.


Although there is no need for it, Haskell still has it, in minor 
variation. It is commonly known as The Dreaded Monomorphism 
Restriction ;).


  - Andreas

--
Andreas Rossberg, [EMAIL PROTECTED]

Let's get rid of those possible thingies!  -- TB
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Emulating bash pipe/ process lib

2006-02-09 Thread Simon Marlow

Marc Weber Marc Weber wrote:

Hi. I want to write a little haskell program executing about 4 programs
passing data via pipes. As my python script seems to be slower than a
bash script I want to try a ghc executable now.
It should invoke different parts of a text to speech chain. This way I
have one interface then.

Talar und #haskell told me that I might use runProcess and pass handles
for stdin and out created by createPipe and fdToHandle.

So my simple test looks like this:


module Main where
import System.IO
import System.Posix.IO

main = do
  (fdIn,fdOut) - createPipe
  let (iohIn, iohOut) = (fdToHandle fdIn, fdToHandle fdOut)
  hIn - iohIn
  hOut - iohOut
  hPutStr hIn test
  line - hGetLine hOut
  print line -- should now print test having been piped through my pipe

but I get the error:
pipe2: file descriptor: 3: hPutStr: illegal operation (handle is not
open for writing)

And in current CVS docs in base.System.Process.hs it is said that
createPipe is no longer exported ?


If you want to communicate with external programs via pipes, then 
System.Process should provide everything you need.  Take a look at 
runInteractiveProcess in particular.


Cheers,
Simon
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Emulating bash pipe/ process lib

2006-02-09 Thread Kurt Hutchinson
On 2/9/06, Marc Weber Marc Weber [EMAIL PROTECTED] wrote:
 Hi. I want to write a little haskell program executing about 4 programs
 passing data via pipes. As my python script seems to be slower than a
 bash script I want to try a ghc executable now.
 It should invoke different parts of a text to speech chain. This way I
 have one interface then.

There is also the HsShellScript library, which has many utilities for
using Haskell as a shell programming language, including good support
for piping. You can find it here:

http://www.volker-wysk.de/hsshellscript/

--
Kurt
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Elementary HaXml question

2006-02-09 Thread Koen . Roelandt
 I'm new to Haskell and HaXml and I'm playing around with the latter to 
 clean some (well-formed) 'legacy' html. This works fine except for the 
 following cases. Some of the elements to be cleaned are:
 
 font size=4iHello World/i/font
 ifont size=4Hello World/font/i
 
 This should become:
 
 h1 class=subtitleHello World/h1
 
 From what I could gather from the documentation, it should be something 
 like:
 
 foldXml (txt ? keep :
 (attrval(size,AttValue[Left 4]) `o` tag font)
/ tag i ? replaceTag h1  : children)

Is the bracketing correct?  I can't remember the precedence of the
operators offhand, but perhaps it should be 

  foldXml (txt ? keep :
  (((attrval(size,AttValue[Left 4]) `o` tag font)
  / tag i) ? replaceTag h1  : children))

Yes, the braketing is correct since the following code:

foldXml (txt ? keep :
fontSize4 / tag em ? mkSubtitle :
children)

fontSize4 = (attrval(size,AttValue[Left 4]) `o` tag font)
mkSubtitle = mkElemAttr h1 [(class, (subtitle!))]
[children] 

now transforms
 
font size=4emHello World/em/font

into

h1 class=subtitleemHello World/em/font

Which I'm satisfied with (hurray!). The em appears because I 'keep' it 
higher in the original switch, the example above is just an extract for 
brevity's sake. 
I still have a problem with the other example:
 
emfont size=4Hello World/font/em

I _think_ the line in the .hs file should be:

tag em / fontSize4 ? mkSubtitle :

Which doesn't work, and I don't know why. If the first example works, 
shouldn't the second, too? I also tried
 
tag em / font ? mkSubtitle  : 

Which doesn't work either. I transformed it into 

tag font `o` children `o` tag em ? mkSubtitle :

without avail. Again, any ideas are welcome. (btw: I like HaXml, Malcolm, 
nice work!)

Koen.





___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] FFI question

2006-02-09 Thread Donn Cave
On Thu, 9 Feb 2006, Christopher Brown wrote:
 Frederico,
 
 Have you tried using Green Card?
 
 http://haskell.org/greencard/
 
 It is basically a foreign function pre-processor for Haskell. It  
 allows your Haskell programs to interface with C libraries in a very  
 straight forward way.

I tried it, and managed to get it working to some extent.  Then
I found out about hsc2hs and the current FFI support in ghc, and
I noticed that according to http://www.haskell.org/greencard/ ,
the current version of Green Card is an alpha release from 2003.

From comparison of the two, my impression is that this parrot is
dead, and everyone is just too polite to say so.  Unfortunately,
this inability to pull the shades on Green Card, Haskell Direct,
etc., takes away a little from ghc's outstanding FFI.

Donn Cave, [EMAIL PROTECTED]

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] standard poll/select interface

2006-02-09 Thread Bulat Ziganshin
Hello John,

Thursday, February 09, 2006, 3:19:30 AM, you wrote:

 JM If we had a good standard poll/select interface in System.IO then we
 JM actually could implement a lot of concurrency as a library with no
 JM (required) run-time overhead. I'd really like to see such a thing get
 JM into the standard. Well, mainly it would just be a really useful thing
 JM to have in general. If others think it is a good idea I can try to come
 JM up with a suitable API and submit it to the repo.
 
 i have delayed answering to this letter until i announced my Streams
 library. now i can say that such API already exists - in terms of my
 library you need just to write an transformer that intercepts
 vGetBuf/vPutBuf calls and pass them to the select/poll machinery. so
 you can write such transformer just now and every program that uses
 Streams will benefit from its usage. Converting programs that use
 Handles to using Streams should be also an easy task.

JM I was actually asking for something much more modest, which was the
JM routine needed to pass them to the select/poll machinery. but yeah, what
JM you say is one of my expected uses of such a routine. Once a standard IO
JM library settles down, then I can start working on the exact API such a
JM routine would have.

but if all will wait while the library settles down, it will never
occur :)  your work can change design of library, like the my library
itself can change the shape of haskell' :)  at this moment, i just
developed the library which satisfy demands in extending current I/O
library by new features, such as Unicode support, high speed,
portability to other compilers, binary i/o, i/o for packed strings,
and asynchronous i/o using methods other than select(). but i don't
implement all these features actually, i just developed
infrastructure, in which all these features can be easily added.
unlike the System.IO library, you don't need to ask someone to
implement new features or make corrections in foreign sources. you
just need to develop module what implements this standard Stream
interface and then it can be used as easy as transformers from the
library itself

as i understand this idea, transformer implementing async i/o should
intercept vGetBuf/vPutBuf calls for the FDs, start the appropriate
async operation, and then switch to another Haskell threads. the I/O
manager thread should run select() in cycle and when the request is
finished, wake up the appropriate thread. what's all. if you will ever
need, this implementation can then be used to extend GHC's System.IO
internals with the support for new async i/o managers (as i
understand, select() is now supported by GHC, but poll(), kqueue() is
not supported?). the only difference that my lib gives an opportunity
to test this implementation without modifying GHC I/O internals, what
is somewhat simpler. so, interface for async vGetBuf/vPutBuf routines
should be the same as for read/write:

type FD = Int
vGetBuf_async :: FD - Ptr a - Int - IO Int
vPutBuf_async :: FD - Ptr a - Int - IO Int

i think that implementations for ghc and jhc should be slightly
different, though, because of different ways to implement
multi-threading. but the I/O manager should be the same - it just
receives info about I/O operations to run and returns information
about completed ones.

... well, this I/O manager should implement just one operation:

performIO :: Request - IO ()

type Request = (IOType, FD, Ptr a, Int, Notifier)
data IOType = Read | Write | ...
type Notifier = Result - IO ()
data Result = OK Int | Fail ErrorInfo

performIO starts new I/O operation. On the completion of this
operation, Notifier is called with information about results of
execution.

so, for the GHC the following should work:

vGetBuf_async fd ptr size = do
done - newMVar
let notifier = putMVar done ()
performIO (Read, fd, ptr, size, notifier)
takeMVar done

for JHC, the body of vGetBuf_async may be different

if you will find this interface reasonable, at least for the first
iteration, i will develop appropriate transformer, so for you remains
only the implementation of performIO

 of course, Streams library is not some standard just now, and moreover
 - it is not compatible with JHC. the greatest problem is what i using
 type classes extensions available in GHC/Hugs what is not in H98
 standard. so, i'm interested in pushing Haskell' to accept most
 advanced possible extensions in this area and, of course, in actual
 implementing these extensions in the Haskell compilers. alternative
 way to make Streams available to wider range of Haskell compilers is
 to strip support of streams working in monads other that IO.

JM Don't take the absence of a feature in jhc to mean I don't like or want
JM that feature. There are a lot of things I don't have but that I'd
JM definitly want to see in the language simply because I was only shooting
JM for H98 to begin with and was more interested in a lot of the back end
JM stuff. You should figure out 

Re[2]: [Haskell-cafe] Emulating bash pipe/ process lib

2006-02-09 Thread Bulat Ziganshin
Hello Donn,

Thursday, February 09, 2006, 8:58:27 PM, you wrote:

DC Slow devices like pipes, sockets etc. get along fine with Handles
DC or whatever buffered I/O - as long as you have only one going at a time.
DC Multiple input sources - like, say you want to read a process' output
DC (unit 1) and diagnostic output (unit 2) separately, and either one has
DC the potential to fill up the pipe and block while you're waiting for
DC input on the other pipe - buffers at least complicate the dispatching
DC mechanics you need for this, if not make it impossible.

are you tried LineBuffering and NoBuffering? seem that it is developed
exactly for this case (plus for terminals)


-- 
Best regards,
 Bulatmailto:[EMAIL PROTECTED]



___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] FFI Wiki Page (was: FFI question)

2006-02-09 Thread Dimitry Golubovsky
Bulat wrote:

 we need to establish FFI
 page on the wiki and give at least links to all this packages and
 small info about using FFI with ghc/hugs

There is such a page (to be more precise, a section of a page):

http://haskell.org/hawiki/LibrariesAndTools

section FFI Preprocessors

Also there are http://haskell.org/hawiki/FfiCookbook and
http://haskell.org/hawiki/FfiTutorial pages.

--
Dimitry Golubovsky

Anywhere on the Web
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re[2]: [Haskell-cafe] Emulating bash pipe/ process lib

2006-02-09 Thread Donn Cave
On Thu, 9 Feb 2006, Bulat Ziganshin wrote:
 Thursday, February 09, 2006, 8:58:27 PM, you wrote:
 DC Slow devices like pipes, sockets etc. get along fine with Handles
 DC or whatever buffered I/O - as long as you have only one going at a time.
 DC Multiple input sources - like, say you want to read a process' output
 DC (unit 1) and diagnostic output (unit 2) separately, and either one has
 DC the potential to fill up the pipe and block while you're waiting for
 DC input on the other pipe - buffers at least complicate the dispatching
 DC mechanics you need for this, if not make it impossible.
 
 are you tried LineBuffering and NoBuffering? seem that it is developed
 exactly for this case (plus for terminals)

That's part of the idea, it helps keep the data out of buffers where
select or whatever can't see it.

But then you need functions with semantics that really support unbuffered
I/O.  When select tells you that the device is readable, you don't know
that there is one full line, or how many bytes there are, so hGetLine
doesn't apply here, nor would the Haskell equivalent of fread(3) if there
were one.  The only thing left is hGetChar - one char, then select, then
another.  (And multi-byte chars cause us to worry about this.)

Since POSIX read(2) already supports exactly the functions you need for
unbuffered I/O, it's simpler, easier and more efficient to leave the whole
business right there at the file descriptor level.  I'm sure you can make
a non-buffering buffer layer work on top of the file descriptor, but what
makes it worth the trouble?

Donn Cave, [EMAIL PROTECTED]

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] standard poll/select interface

2006-02-09 Thread Einar Karttunen
On 09.02 22:24, Bulat Ziganshin wrote:
 as i understand this idea, transformer implementing async i/o should
 intercept vGetBuf/vPutBuf calls for the FDs, start the appropriate
 async operation, and then switch to another Haskell threads. the I/O
 manager thread should run select() in cycle and when the request is
 finished, wake up the appropriate thread. what's all. if you will ever
 need, this implementation can then be used to extend GHC's System.IO
 internals with the support for new async i/o managers (as i
 understand, select() is now supported by GHC, but poll(), kqueue() is
 not supported?). the only difference that my lib gives an opportunity
 to test this implementation without modifying GHC I/O internals, what
 is somewhat simpler. so, interface for async vGetBuf/vPutBuf routines
 should be the same as for read/write:
 
 type FD = Int
 vGetBuf_async :: FD - Ptr a - Int - IO Int
 vPutBuf_async :: FD - Ptr a - Int - IO Int

Please don't fix FD = Int, this is not true on some systems,
and when implementing efficient sockets one usually wants
to hold more complex state.

 JM Don't take the absence of a feature in jhc to mean I don't like or want
 JM that feature. There are a lot of things I don't have but that I'd
 JM definitly want to see in the language simply because I was only shooting
 JM for H98 to begin with and was more interested in a lot of the back end
 JM stuff. You should figure out the nicest design that uses just the
 JM extensions needed for the design you want. it could help us decide what
 JM goes into haskell-prime to know what is absolutely needed for good
 JM design and what is just nice to have.
 
 this simply means that the Streams library cannot be used with JHC,
 what is bad news, because it is even more rich than GHC's System.IO.
 jhc had chance to get modern I/O library. but it lost that chance :)

I think it is more like all haskell-prime programs. Seriously,
if we design a new IO subsystem it would be quite nice to be
able to use it from standard conforming programs.

Maybe things can be reformulated in a way that will be compatible
with haskell-prime.

 please look. at this moment Sreams library lacks only a few important
 features, already implemented in GHC's System.IO: sockets, line
 buffering and async i/o. moreover, i don't have an experience in
 implementing the async i/o, so foreign help is really necessary

If you want I can look at getting network-alt to implement the
interface.

- Einar Karttunen
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Language shootout (reloaded)

2006-02-09 Thread Donald Bruce Stewart
Just so we can feel that we're doing the right things :)

On the great language shootout, as of last night, we're:

  * Ranked overall number 1, by a good margin: 
  * Ranked number 1 on lines of code
  * Ranked number 2 on speed.

 http://shootout.alioth.debian.org/gp4/benchmark.php?test=alllang=all

Thanks to everyone who's contributed to the entries over the last few
weeks, on the wiki, and on this list.

Cheers,
   Don

P.S. I remember having a discussion on #haskell 2 weeks ago where we all
agreed that Haskell placing #1 was pretty much impossible. Did we have
an inferiority complex?
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Numerical methods in Haskell

2006-02-09 Thread Bulat Ziganshin
Hello Creighton,

Friday, February 10, 2006, 12:45:21 AM, you wrote:

CH Between google searching and looking through the activity
CH report, I take it that no one has really developed serious 
CH libraries for matrix manipulations, diff eqs, etc.

it was a discussion and development in this direction, but seems that
there is no ultimate result

see for example june thread Re: [Haskell-cafe] matrix computations
based on the GSL


-- 
Best regards,
 Bulatmailto:[EMAIL PROTECTED]



___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Language shootout (reloaded)

2006-02-09 Thread Stefan Holdermans

Don Stewart wrote:

P.S. I remember having a discussion on #haskell 2 weeks ago where  
we all

agreed that Haskell placing #1 was pretty much impossible. Did we have
an inferiority complex?


Still---and, please, forgive me for this---I feel that us being #1  
now tells us more about the Haskell community than it tells us about  
Haskell.


Regards,

  Stefan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Language shootout (reloaded)

2006-02-09 Thread Cale Gibbard
On 10/02/06, Stefan Holdermans [EMAIL PROTECTED] wrote:
 Don Stewart wrote:

  P.S. I remember having a discussion on #haskell 2 weeks ago where
  we all
  agreed that Haskell placing #1 was pretty much impossible. Did we have
  an inferiority complex?

 Still---and, please, forgive me for this---I feel that us being #1
 now tells us more about the Haskell community than it tells us about
 Haskell.


The Haskell community is an important part of Haskell. :)

 - Cale
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe