Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Don Stewart
liamoc:
> On 19 April 2010 05:29, Don Stewart  wrote:
> > That's great info -- we do have an unregisterised ARM port of GHC in
> > Debian, iirc. (And the LLVM backend can generate ARM code too)
> 
> 
> Sounds good. With regards to LLVM, what dependencies does LLVM ARM
> code have? Android has gnu libraries not llvm, i don't know if that is
> okay.
> 
> A superior approach would be to compile haskell to Java or Dalvik
> bytecode (or even JVM bytecode if it doesn't use any JIT features;
> then we can compile that to dalvik bytecode), but this is obviously
> more work if we already have an ARM port.

More work also in that you need to port the runtime system to Java...
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Move MonadIO to base

2010-04-18 Thread Isaac Dupree

On 04/19/10 02:15, Anders Kaseorg wrote:

I would be very happy to get the simpler interface to work, because it’s
Haskell 98.  However, if I write
 joinIO m = morphIO (\w ->  m>>= w)
 morphIO' f = joinIO (f return)
and define catch using morphIO' instead of morphIO:
 m `catch` h = morphIO $ \w ->  w m `Control.Exception.catch` \e ->  w (h e)
 m `catch'` h = morphIO' $ \w ->  w m `Control.Exception.catch` \e ->  w (h 
e)
then catch' fails to actually catch anything:

*Main>  throwIO NonTermination `catch` \NonTermination ->  return "moo"
"moo"
*Main>  throwIO NonTermination `catch'` \NonTermination ->  return "moo"
*** Exception:<>

Am I doing something wrong?


Well, let's see what happens if we apply it to the fairly easy

> instance MonadMorphIO IO where
> morphIO f = f id

then

joinIO m = morphIO (\w -> m >>= w)
 = (\w -> m >>= w) (id) = m >>= id = join m
morphIO' f = joinIO (f return) = join (f return)
morphIO = f id

m `catch` h = morphIO $ \w ->  w m `Control.Exception.catch` \e ->  w (h e)
[w = id]
= id m `Control.Exception.catch` \e ->  id (h e)

m `catch'` h = morphIO' $ \w ->  w m `Control.Exception.catch` \e ->  w 
(h e)

[w = return]
=  join (return m `Control.Exception.catch` \e -> return (h e))

Do you see the difference? The effects are sequenced in different 
places.  The return/join pair moves all the effects *outside* the 
operations such as catch... thus defeating the entire purpose of morphIO.


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


[Haskell-cafe] Re: Move MonadIO to base

2010-04-18 Thread Anders Kaseorg
On Sun, 18 Apr 2010, wren ng thornton wrote:
> lift ma = morph (\k -> join (fmap (k . return) ma))

Monad laws simplify that to
lift ma = morph (\k -> ma >>= k . return)

> The type of morph requires us to Church-encode things needlessly; what 
> we mean to say is: morph (fmap return ma).

Hmm.  If I understand this (and your other emails) correctly, you’re 
saying my interface
class Monad m => MonadMorphIO m where
morphIO :: (forall b. (m a -> IO b) -> IO b) -> m a
should be equivalent to a simpler interface
class Monad m => MonadJoinIO m where
joinIO :: IO (m a) -> m a
via some isomorphism like
morphIO f = joinIO (f return)
joinIO m = morphIO (\w -> m >>= w)

I would be very happy to get the simpler interface to work, because it’s 
Haskell 98.  However, if I write
joinIO m = morphIO (\w -> m >>= w)
morphIO' f = joinIO (f return)
and define catch using morphIO' instead of morphIO:
m `catch` h = morphIO $ \w -> w m `Control.Exception.catch` \e -> w (h e)
m `catch'` h = morphIO' $ \w -> w m `Control.Exception.catch` \e -> w (h e)
then catch' fails to actually catch anything:

*Main> throwIO NonTermination `catch` \NonTermination -> return "moo"
"moo"
*Main> throwIO NonTermination `catch'` \NonTermination -> return "moo"
*** Exception: <>

Am I doing something wrong?

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


Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Liam O'Connor
Ah, looks as though we'll have to write a C layer between Java and
Haskell.. doing all of this in  the FFI seems like hard:

http://www.koushikdutta.com/2009/01/jni-in-android-and-foreword-of-why-jni.html

Cheers.
~Liam



On 19 April 2010 14:33, Liam O'Connor  wrote:
> Also worth mentioning that the Android docs explicitly warn against
> "allocating frequently" suggesting reuse of objects is by far more
> preferable than regularly allocating stuff. If we go the Dalvik/Java
> route, then we'll have alot of work to do to make the GC work for us
> nicely, whereas compiling to native code gives us full control.
>
> The problem (and why I believe compiling to Java would be better) is
> that it is quite tedious and difficult to interact with Java APIs
> using native code. You write a shell of your application in java and
> put calls in to native code everywhere. It ruins alot of the glamor of
> Haskelling for android. That said, if we can somehow expose some Java
> functions to haskell (rather than the other way around) then we could
> eventually write an android API library for native haskell, giving us
> both the performance benefits and the android api.
>
> Cheers.
> ~Liam
>
>
>
> On 19 April 2010 14:25, Liam O'Connor  wrote:
>> On 19 April 2010 05:29, Don Stewart  wrote:
>>> That's great info -- we do have an unregisterised ARM port of GHC in
>>> Debian, iirc. (And the LLVM backend can generate ARM code too)
>>
>>
>> Sounds good. With regards to LLVM, what dependencies does LLVM ARM
>> code have? Android has gnu libraries not llvm, i don't know if that is
>> okay.
>>
>> A superior approach would be to compile haskell to Java or Dalvik
>> bytecode (or even JVM bytecode if it doesn't use any JIT features;
>> then we can compile that to dalvik bytecode), but this is obviously
>> more work if we already have an ARM port.
>>
>> Here's the docs about the ABI we need to conform to in order to use the NDK.
>>
>> -- snip --
>>
>> This is the name of an ABI for ARM-based CPUs that support *at* *least*
>>  the ARMv5TE instruction set. Please refer to following documentation for
>>  more details:
>>
>>   - ARM Architecture Reference manual                (a.k.a  ARMARM)
>>   - Procedure Call Standard for the ARM Architecture (a.k.a. AAPCS)
>>   - ELF for the ARM Architecture                     (a.k.a. ARMELF)
>>   - ABI for the ARM Architecture                     (a.k.a. BSABI)
>>   - Base Platform ABI for the ARM Architecture       (a.k.a. BPABI)
>>   - C Library ABI for the ARM Architecture           (a.k.a. CLIABI)
>>   - C++ ABI for the ARM Architecture                 (a.k.a. CPPABI)
>>   - Runtime ABI for the ARM Architecture             (a.k.a. RTABI)
>>
>>   - ELF System V Application Binary Interface
>>     (DRAFT - 24 April 2001)
>>
>>   - Generic C++ ABI  (http://www.codesourcery.com/public/cxx-abi/abi.html)
>>
>>  Note that the AAPCS standard defines 'EABI' as a moniker used to specify
>>  a _family_ of similar but distinct ABIs. Android follows the little-endian
>>  ARM GNU/Linux ABI as documented in the following document:
>>
>>      http://www.codesourcery.com/gnu_toolchains/arm/arm_gnu_linux_abi.pdf
>>
>>  With the exception that wchar_t is only one byte. This should not matter
>>  in practice since wchar_t is simply *not* really supported by the Android
>>  platform anyway.
>>
>>  This ABI does *not* support hardware-assisted floating point computations.
>>  Instead, all FP operations are performed through software helper functions
>>  that come from the compiler's libgcc.a static library.
>>
>>  Thumb (a.k.a. Thumb-1) instructions are supported. Note that the NDK
>>  will generate thumb code by default, unless you define LOCAL_ARM_MODE
>>  in your Android.mk (see docs/ANDROID-MK.TXT for all details).
>>
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] ANNOUNCE: Agata-0.2.0

2010-04-18 Thread Jonas Almström Duregård
> If this is to be used with QuickCheck maybe it should be named that way.
Certainly worth considering. There seems to be no convenient way of
renaming packages on Hackage though, is there?

I suppose it would be wrong/impossible to create an alias package
(quickcheck-agata) with no modules, just a dependency on the primary
package (Agata)?

/Jonas

2010/4/18 Marc Weber :
> If this is to be used with QuickCheck maybe it should be named that way.
> eg quickcheck-agatath ?
>
> This way its found faster.
>
> Marc Weber
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Liam O'Connor
Also worth mentioning that the Android docs explicitly warn against
"allocating frequently" suggesting reuse of objects is by far more
preferable than regularly allocating stuff. If we go the Dalvik/Java
route, then we'll have alot of work to do to make the GC work for us
nicely, whereas compiling to native code gives us full control.

The problem (and why I believe compiling to Java would be better) is
that it is quite tedious and difficult to interact with Java APIs
using native code. You write a shell of your application in java and
put calls in to native code everywhere. It ruins alot of the glamor of
Haskelling for android. That said, if we can somehow expose some Java
functions to haskell (rather than the other way around) then we could
eventually write an android API library for native haskell, giving us
both the performance benefits and the android api.

Cheers.
~Liam



On 19 April 2010 14:25, Liam O'Connor  wrote:
> On 19 April 2010 05:29, Don Stewart  wrote:
>> That's great info -- we do have an unregisterised ARM port of GHC in
>> Debian, iirc. (And the LLVM backend can generate ARM code too)
>
>
> Sounds good. With regards to LLVM, what dependencies does LLVM ARM
> code have? Android has gnu libraries not llvm, i don't know if that is
> okay.
>
> A superior approach would be to compile haskell to Java or Dalvik
> bytecode (or even JVM bytecode if it doesn't use any JIT features;
> then we can compile that to dalvik bytecode), but this is obviously
> more work if we already have an ARM port.
>
> Here's the docs about the ABI we need to conform to in order to use the NDK.
>
> -- snip --
>
> This is the name of an ABI for ARM-based CPUs that support *at* *least*
>  the ARMv5TE instruction set. Please refer to following documentation for
>  more details:
>
>   - ARM Architecture Reference manual                (a.k.a  ARMARM)
>   - Procedure Call Standard for the ARM Architecture (a.k.a. AAPCS)
>   - ELF for the ARM Architecture                     (a.k.a. ARMELF)
>   - ABI for the ARM Architecture                     (a.k.a. BSABI)
>   - Base Platform ABI for the ARM Architecture       (a.k.a. BPABI)
>   - C Library ABI for the ARM Architecture           (a.k.a. CLIABI)
>   - C++ ABI for the ARM Architecture                 (a.k.a. CPPABI)
>   - Runtime ABI for the ARM Architecture             (a.k.a. RTABI)
>
>   - ELF System V Application Binary Interface
>     (DRAFT - 24 April 2001)
>
>   - Generic C++ ABI  (http://www.codesourcery.com/public/cxx-abi/abi.html)
>
>  Note that the AAPCS standard defines 'EABI' as a moniker used to specify
>  a _family_ of similar but distinct ABIs. Android follows the little-endian
>  ARM GNU/Linux ABI as documented in the following document:
>
>      http://www.codesourcery.com/gnu_toolchains/arm/arm_gnu_linux_abi.pdf
>
>  With the exception that wchar_t is only one byte. This should not matter
>  in practice since wchar_t is simply *not* really supported by the Android
>  platform anyway.
>
>  This ABI does *not* support hardware-assisted floating point computations.
>  Instead, all FP operations are performed through software helper functions
>  that come from the compiler's libgcc.a static library.
>
>  Thumb (a.k.a. Thumb-1) instructions are supported. Note that the NDK
>  will generate thumb code by default, unless you define LOCAL_ARM_MODE
>  in your Android.mk (see docs/ANDROID-MK.TXT for all details).
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Liam O'Connor
On 19 April 2010 05:29, Don Stewart  wrote:
> That's great info -- we do have an unregisterised ARM port of GHC in
> Debian, iirc. (And the LLVM backend can generate ARM code too)


Sounds good. With regards to LLVM, what dependencies does LLVM ARM
code have? Android has gnu libraries not llvm, i don't know if that is
okay.

A superior approach would be to compile haskell to Java or Dalvik
bytecode (or even JVM bytecode if it doesn't use any JIT features;
then we can compile that to dalvik bytecode), but this is obviously
more work if we already have an ARM port.

Here's the docs about the ABI we need to conform to in order to use the NDK.

-- snip --

This is the name of an ABI for ARM-based CPUs that support *at* *least*
  the ARMv5TE instruction set. Please refer to following documentation for
  more details:

   - ARM Architecture Reference manual(a.k.a  ARMARM)
   - Procedure Call Standard for the ARM Architecture (a.k.a. AAPCS)
   - ELF for the ARM Architecture (a.k.a. ARMELF)
   - ABI for the ARM Architecture (a.k.a. BSABI)
   - Base Platform ABI for the ARM Architecture   (a.k.a. BPABI)
   - C Library ABI for the ARM Architecture   (a.k.a. CLIABI)
   - C++ ABI for the ARM Architecture (a.k.a. CPPABI)
   - Runtime ABI for the ARM Architecture (a.k.a. RTABI)

   - ELF System V Application Binary Interface
 (DRAFT - 24 April 2001)

   - Generic C++ ABI  (http://www.codesourcery.com/public/cxx-abi/abi.html)

  Note that the AAPCS standard defines 'EABI' as a moniker used to specify
  a _family_ of similar but distinct ABIs. Android follows the little-endian
  ARM GNU/Linux ABI as documented in the following document:

  http://www.codesourcery.com/gnu_toolchains/arm/arm_gnu_linux_abi.pdf

  With the exception that wchar_t is only one byte. This should not matter
  in practice since wchar_t is simply *not* really supported by the Android
  platform anyway.

  This ABI does *not* support hardware-assisted floating point computations.
  Instead, all FP operations are performed through software helper functions
  that come from the compiler's libgcc.a static library.

  Thumb (a.k.a. Thumb-1) instructions are supported. Note that the NDK
  will generate thumb code by default, unless you define LOCAL_ARM_MODE
  in your Android.mk (see docs/ANDROID-MK.TXT for all details).
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Strange error with type classes + associated types

2010-04-18 Thread Brent Yorgey
Conal,

Thanks for looking into this!  Making (:-*) into a proper type seems
promising.  I did try wrapping (:-*) in a newtype but that didn't
help (although I didn't expect it to).

I see you just uploaded a new version of vector-space; what's new in
0.6.2?

-Brent

On Sat, Apr 17, 2010 at 10:28:45AM -0700, Conal Elliott wrote:
> Oh!  I'd completely forgotten about this idea.  Looking at Data.LinearMap in
> vector-space, I see a comment about exactly this ambiguity, as well as the
> start of a new module that wraps a data type around the linear map
> representation.  I don't recall whether I got stuck or just distracted.
> 
> On Sat, Apr 17, 2010 at 3:46 AM, Roman Leshchinskiy 
> wrote:
> 
> > On 17/04/2010, at 11:00, Conal Elliott wrote:
> >
> > > I'm unsure now, but I think I tried making Basis a data type (not syn)
> > and ran into the problem I mentioned above.  The Basis *synonyms* also have
> > HasTrie instances, which is crucially important.  If we switch to
> > (injective) data types, then we lose the HasTrie instances.  I'd be okay
> > with defining HasTrie instances (preferably via "deriving") for the
> > associated Basis data types, but I couldn't figure out how to.  Maybe it's
> > not possible currently, or maybe I just didn't know how.
> >
> > Could you perhaps make (:-*) a proper type rather than a synonym? That
> > would help with the ambiguity.
> >
> > Roman
> >
> >
> >

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

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


[Haskell-cafe] Re: Embedded funcional programming?

2010-04-18 Thread Stefan Monnier
> As a side comment, I haven't noticed any reaction in the
> Haskell/iPhone community about Apple's recent policy change.

The stricter they make it, the better, since it hopefully gets us closer
to the point where people will see that they should stay the heel away
from any such handcuffs,


Stefan

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


[Haskell-cafe] Re: US Patent for the idea of using Haskell to implement UAX #9

2010-04-18 Thread Stefan Monnier
>> revealed a link to a US Patent (7120900) for the idea of implementing
>> the Unicode Bidirectional Algorithm (UAX #9
>> http://www.unicode.org/reports/tr9) in Haskell, making use, as far as I
>> can tell, of nothing more than the normal approach any functional
>> programmer would use, namely separation of concerns etc.
> In which case the patent should be null and void since obvious ideas aren't 
> patentable, AFAIK.

Doesn't matter: you'd need to pay lawyers to defend yourself to convince
a court that it is null and void.  So even if you may end up winning in
the end (which is far from obvious), you'll have wasted a lot of time,
effort, and money.


Stefan

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


Re: [Haskell-cafe] Re: Ocaml for Haskellers tutorial

2010-04-18 Thread Richard O'Keefe


On Apr 19, 2010, at 2:56 PM, Pierre-Etienne Meunier wrote:

Then maybe you should try godi. It is the camlist's cabal, but while  
the authors of cabal have really done a good job, godi is still  
quite poorly written, and has not gained wide acceptance in the  
community.


No, it is precisely godi that gives me endless grief, and has done so
consistently for years.



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


Re: [Haskell-cafe] Re: US Patent for the idea ...

2010-04-18 Thread Richard O'Keefe

When it comes to patents, there is less than meets the eye.
A review of Intellectual Property in New Zealand a few years
ago found that the NZ Intellectual Property Office quite
deliberately do not review patent applications for originality.
An IP law expert I spoke to about this felt that there was no
problem, because patents that failed the originality criterion
would fail in court.  It didn't seem to bother him that
defending yourself costs money.  He was also untroubled that
computer science professionals find most software patents
incomprehensible; again, such patents fail a basic requirement
so it should all be cleared up in court (and of course we can
all afford that).

The Australians recently conducted an experiment asking volunteers
to check for prior art.  The patent application I commented on
claimed the invention of doing whole number arithmetic in a
computer using "big digits" to base (10**max) where (10**max) just
fits into a computer word.  This of course goes back to _at least_
the 1960s.

The people who claimed this particular patent may well have
perfectly innocent intentions:  they may not be trying to block
anyone else doing obvious things, they may be trying to protect
themselves against being blocked.  The only way to tell, really,
is to find out what they want for a licence to use "their"
"invention".

The current review of New Zealand IP protection may well scrap
software patents entirely, in part on the grounds that we cannot
afford to do a proper job of scrutiny.

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


Re: [Haskell-cafe] Re: Ocaml for Haskellers tutorial

2010-04-18 Thread Pierre-Etienne Meunier
Then maybe you should try godi. It is the camlist's cabal, but while the 
authors of cabal have really done a good job, godi is still quite poorly 
written, and has not gained wide acceptance in the community.

And, yes, there are cool applications written in ocaml. People claim that the 
best application ever written in ocaml is unison, but also since it is the only 
language french engineers learn at school, there are a lot of private 
applications such as the controller for line 14 of the parisian metro ("the" 
automatic line in Paris), or maybe things at airbus. And of course, coq is also 
written in ocaml.

And, if the organization that developed caml (inria) had not stopped financing 
it, there would be a concurrent GC (in fact the algorithm exists, but has never 
been implemented), the FFI would probably be as nice as haskell's, and more 
than one person in the world would understand the code of ocamlc,
Also, maybe there would be a norm for ocaml, and microsoft wouldn't have dumped 
the language as f#.

Conclusion : if you want to be a researcher, come to France, it is pretty cool 
here...


El 18/04/2010, a las 22:37, Richard O'Keefe escribió:

> There are some really impressive applications done with Ocaml,
> some of which I have wanted to try out.
> I have never had any difficulty installing the core Ocaml system,
> but have never yet succeeded in getting the additional libraries
> put together.
> (Home-brew package systems are not _always_ a good idea.)
> 
> 

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


Re: [Haskell-cafe] Re: Ocaml for Haskellers tutorial

2010-04-18 Thread Richard O'Keefe

There are some really impressive applications done with Ocaml,
some of which I have wanted to try out.
I have never had any difficulty installing the core Ocaml system,
but have never yet succeeded in getting the additional libraries
put together.
(Home-brew package systems are not _always_ a good idea.)


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


[Haskell-cafe] Re: Move MonadIO to base

2010-04-18 Thread David Menendez
On Sun, Apr 18, 2010 at 5:02 PM, wren ng thornton
 wrote:
> Heinrich Apfelmus wrote:
>>
>> Anders Kaseorg wrote:
>>>
>>> This concept can also be generalized to monad transformers:
>>>
>>> class MonadTrans t => MonadTransMorph t where
>>>    morph :: Monad m => (forall b. (t m a -> m b) -> m b) -> t m a
>>
>> [...]
>> However, not all control operators can be lifted this way. Essentially,
>> while you may "downgrade" an arbitrary selection of  t m a  values you
>> may only promote one  m a  in return and all have to share the same
>> return type  a . In particular, it's not possible to implement
>>
>>    lift :: (Monad m, MonadTrans t) => m a -> t m a
>
> Why not?
> * morph       says m(t m a) is a subset of (t m a)
> * Monad m     says we can fmap :: (a->b) -> (m a->m b)
> * Monad (t m) says we can return :: a -> t m a
>
>    lift ma = morph (\k -> k (fmap return ma))

Maybe something like this?

lift m = morph (\k -> m >>= k . return)
-- n.b., return and >>= are from different monads

> Again, having m(t m a)->(t m a) is strictly more expressive than only having
> (m a)->(t m a) because the former may avail itself of operations/operators
> of t.

join . lift :: m (t m a) -> t m a

morph is more powerful than lift, but it isn't because of the type.

-- 
Dave Menendez 

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


Re: GUI (was: Re: [Haskell-cafe] DLL on Windows)

2010-04-18 Thread Jeremy O'Donoghue
On 18/04/2010, Daniel Fischer  wrote:
> Am Sonntag 18 April 2010 21:41:06 schrieb Daniel Fischer:
>> wx-config should have been installed as part of the wxWidgets package.
>> Is that not included in the windows-installer of wxWidgets?
>
> Seems it's not so.
> http://www.haskell.org/haskellwiki/WxHaskell/Building says
> "Windows users should also get the Windows port of wx-config."
> ( http://sites.google.com/site/wxconfig/

Sadly, the Windows port of wxWidgets doesn't contain wx-config (all of
the Unix variants have it - it's a shell script), which is a major
problem as this by far the simplest way for the build system to work
out the options used to build wxWidgets.

The Windows port of wx-config is an attempt to fix this problem, but
only currently supports gcc, hence the restriction to using MinGW
(although I guess Cygwin would probably work).

>> > If wxHaskell could be installed with one cabal command that would be
>> > incredibly cool :-)
>
> Well, it's just one cabal command if you have all non-Haskell requirements
> installed as needed.

An option I am looking at is creating a basic Windows installer for
wxHaskell which would contain a compiled copy of wxWidgets and a copy
of wx-config, and which would run cabal install wxWidgets out of the
box. (basic here means you probably don't get to choose anything at
all - not even where the wxWidgets libraries get installed)

Provided that I don't need to maintain a source distribution, this
might be a good way forward for some Windows users. The installer
would be updated for 'significant' wxWidgets updates (you would be
able to 'cabal install wx' at any time wxHaskell is updated once you
have all of the libraries)

Any interest - please let me know.

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


Re: [Haskell-cafe] vector recycling

2010-04-18 Thread Roman Leshchinskiy
On 18/04/2010, at 08:07, Ben wrote:

> On Fri, Apr 16, 2010 at 11:19 PM, Roman Leshchinskiy  
> wrote:
>> That said, it would be quite possible to provide something like the 
>> following:
>> 
>> fold_inplace :: Vector v a => (v a -> b -> v a) -> v a -> [b] -> v a
> 
> as far as i understand there would be two ways of writing such a
> function : 1) to use mutable vectors monadically underneath and hide
> them inside some kind of unsafeX, or 2) to give a specialized fold
> with sufficient hints to the compiler to use the rewriting framework.

Right, I meant 2. I'm not saying it's necessarily a good idea, just that it 
would be possible.

>> This could use the recycling framework to safely do as much in-place as 
>> possible while still preserving a purely functional interface. I have to 
>> think about it. Really, this looks like just a poor man's substitute for 
>> linear types.
> 
> although i am supposed to know something about category theory, since
> my training is in math, i don't know about girard's later work.  is
> there a short precis you can give (or a pointer?)

This is a nice introduction:

http://homepages.inf.ed.ac.uk/wadler/papers/linear/linear.ps

Also, Clean's uniqueness types are quite similar.

Roman


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


Re: [Haskell-cafe] hamming distance allocation

2010-04-18 Thread Daniel Fischer
Am Montag 19 April 2010 01:03:14 schrieb Arnoldo Muller:
> Hello all:
>
> I want to generate some hamming distance statistics about a set of
> strings. As explained in another e-mail in this list, I used the
> following code to call the
> functions:
> (exampl holds the list of strings of size w)
> filter (\x -> x /= 0) $ map (uncurry hammingX) [(xs, ys) | xs <- exampl,
> ys <- exampl]
>
> I have two hamming functions:
> -- hamming distance for variable length strings
> hamming :: String -> String -> Int
> hamming x y = hamming' x y 0
> where
>   hamming' [] _ !c = c
>   hamming' _ [] !c = c
>   hamming' (x:xs) (y:ys) !c
>   | x == y = hamming' xs ys c
>   | otherwise = hamming' xs ys (c + 1)
>
> -- function posted in this mailing list
> hamming2 :: String -> String -> Int
> hamming2 xs ys = length (filter not (zipWith (==) xs ys))
>
> I am executing these functions millions of times and the bottleneck of
> my program is in them as explained by running in profiling mode with 
> +RTS -K400M -p -RTS
>
> The costlier function is the hamming distance
> COST CENTREMODULE   %time %alloc
>
> hammingDistances 66.6   41.9
>
> It says that it is performing 41% of the allocations. In the case of
> hamming2 the allocations go as far as 52%.

Allocations are cheap, so that's not necessarily a problem. More important 
is, what's the maximum residency and how much is copied during GC?
Are you compiling with -O2 ?

> I could understand that
> there are allocations in "hamming2" because we are creating pairs, but
> in the case of "hamming" there should be no allocation.

Why not? I don't know how GHC counts allocations, but everytime you go from 
(x:xs) to xs, you need a new pointer to the tail. If that counts as 
allocation, hamming must allocate a lot, too.

>
> How can I execute my hamming functions without allocating memory?
>
> Best regards,
>
> Arnoldo Muller

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


[Haskell-cafe] ANN: vcd-0.1.0

2010-04-18 Thread Tom Hawkins
The release adds a simple VCD parser (via Parsec) and minor changes to
the VCD generation API.

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


Re: GUI (was: Re: [Haskell-cafe] DLL on Windows)

2010-04-18 Thread Ivan Miljenovic
On 19 April 2010 06:06, Daniel Fischer  wrote:
>> > If wxHaskell could be installed with one cabal command that would be
>> > incredibly cool :-)
>
> Well, it's just one cabal command if you have all non-Haskell requirements
> installed as needed.

Exactly; it's unreasonable to suggest/assume that cabal-install can
deal with non-Haskell dependencies and toolchains for you.

-- 
Ivan Lazar Miljenovic
ivan.miljeno...@gmail.com
IvanMiljenovic.wordpress.com
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Tom Davies

On 18/04/2010, at 1:39 PM, Darrin Chandler wrote:
> I recently purchased an Android phone and spent a little time looking
> around to see if Haskellers were doing anything there, but no luck so
> far. Has anyone here done anything with Android?

Not Haskell, but FP on Android: 
http://www.kablambda.org/blog/2009/07/27/functional-programming-on-android/

I don't have an Android, so all I did was a 'hello world' to see if it could be 
done.

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


[Haskell-cafe] hamming distance allocation

2010-04-18 Thread Arnoldo Muller
Hello all:

I want to generate some hamming distance statistics about a set of strings.
As explained in another e-mail in this list, I used the following code to
call the
functions:
(exampl holds the list of strings of size w)
filter (\x -> x /= 0) $ map (uncurry hammingX) [(xs, ys) | xs <- exampl, ys
<- exampl]

I have two hamming functions:
-- hamming distance for variable length strings
hamming :: String -> String -> Int
hamming x y = hamming' x y 0
where
  hamming' [] _ !c = c
  hamming' _ [] !c = c
  hamming' (x:xs) (y:ys) !c
  | x == y = hamming' xs ys c
  | otherwise = hamming' xs ys (c + 1)

-- function posted in this mailing list
hamming2 :: String -> String -> Int
hamming2 xs ys = length (filter not (zipWith (==) xs ys))

I am executing these functions millions of times and the bottleneck of my
program is in them as explained by running in profiling mode with  +RTS
-K400M -p -RTS

The costlier function is the hamming distance
COST CENTREMODULE   %time %alloc

hammingDistances 66.6   41.9

It says that it is performing 41% of the allocations. In the case of
hamming2 the allocations go as far as 52%.  I could understand that there
are allocations in "hamming2" because we are creating pairs, but in the case
of "hamming" there should be no allocation.

How can I execute my hamming functions without allocating memory?

Best regards,

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


Re: [Haskell-cafe] Re: cabal: other-modules

2010-04-18 Thread wren ng thornton

Ivan Lazar Miljenovic wrote:

Why are people suddenly using the term "morally" when they mean "why
doesn't this do what I think it should"?  None of its definitions seem
to match what you mean:


The usage on this thread seems a bit nonstandard, but I'm assuming it's 
based off the more general idiom of things being "morally equivalent"--- 
that is, things which *should* be equal because we mean for them to be 
(regardless of what a particular model (e.g., a programming language) says).


In other words, with the right set of beliefs (i.e., "moral" beliefs, or 
the "right" religion) they are indeed equal, but the world is violating 
those beliefs somehow. The implication being that the world (model, 
PL,...) should be changed, rather than the beliefs.


--
Live well,
~wren
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Move MonadIO to base

2010-04-18 Thread wren ng thornton
This bounced because I have different emails registered for cafe@ and 
libraries@, so forwarding it along to the cafe.



wren ng thornton wrote:

wren ng thornton wrote:

Heinrich Apfelmus wrote:

Anders Kaseorg wrote:

This concept can also be generalized to monad transformers:

class MonadTrans t => MonadTransMorph t where
morph :: Monad m => (forall b. (t m a -> m b) -> m b) -> t m a


[...]
However, not all control operators can be lifted this way. Essentially,
while you may "downgrade" an arbitrary selection of  t m a  values you
may only promote one  m a  in return and all have to share the same
return type  a . In particular, it's not possible to implement

lift :: (Monad m, MonadTrans t) => m a -> t m a


Why not?
* morph   says m(t m a) is a subset of (t m a)
* Monad m says we can fmap :: (a->b) -> (m a->m b)
* Monad (t m) says we can return :: a -> t m a

lift ma = morph (\k -> k (fmap return ma))


Or rather,

lift ma = morph (\k -> join (fmap (k . return) ma))

That's what I get for typing without checking. The type of morph 
requires us to Church-encode things needlessly; what we mean to say is: 
morph (fmap return ma).


Again, having m(t m a)->(t m a) is strictly more expressive than only 
having (m a)->(t m a) because the former may avail itself of 
operations/operators of t.


--
Live well,
~wren
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: GUI (was: Re: [Haskell-cafe] DLL on Windows)

2010-04-18 Thread Daniel Fischer
Am Sonntag 18 April 2010 21:41:06 schrieb Daniel Fischer:
> wx-config should have been installed as part of the wxWidgets package.
> Is that not included in the windows-installer of wxWidgets?

Seems it's not so.
http://www.haskell.org/haskellwiki/WxHaskell/Building says
"Windows users should also get the Windows port of wx-config."
( http://sites.google.com/site/wxconfig/ )
Furthermore,
http://www.haskell.org/haskellwiki/WxHaskell/Building#On_Windows
says you can't use just any old compiler to build wxWidgets on windows, but 
have to use the MinGW compiler.


> > If wxHaskell could be installed with one cabal command that would be
> > incredibly cool :-)

Well, it's just one cabal command if you have all non-Haskell requirements 
installed as needed.

> >
> > Thanks, Neil

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


Re: GUI (was: Re: [Haskell-cafe] DLL on Windows)

2010-04-18 Thread Daniel Fischer
Am Sonntag 18 April 2010 20:59:25 schrieb Neil Mitchell:
> Hi,
>
> I thought this thread suggested that a cabal install wx would now
> work?

It does, as far as I can tell.

> I just tried it and got:
>
> ...
> generated 2439 constant definitions
> ok.
> setup.exe: wx-config: does not exist

That's not our fault, I think :)
You need wxWidgets-2.8.*.
wx-config should have been installed as part of the wxWidgets package. Is 
that not included in the windows-installer of wxWidgets?

$ which wx-config
/usr/bin/wx-config
$ wx-config --help

 wx-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--release] [--version-
full]
   [--list] [--selected-config] [--host=HOST] [--toolkit=TOOLKIT]
   [--universal[=yes|no]] [--unicode[=yes|no]] [--debug[=yes|no]]
   [--static[=yes|no]] [--version[=VERSION]] [--basename] [--cc]
   [--cppflags] [--cflags] [--cxxflags] [--rescomp] [--libs] [--
cxx]
   [--ld] [--linkdeps] [--utility=UTIL] [LIB ...]

wx-config returns information about the wxWidgets libraries available 
on
  your system.  It may be used to retrieve the information required to 
build
  applications using these libraries using --cppflags, --cflags,  --
cxxflags
  and --libs options.


> cabal: Error: some packages failed to install:
> wx-0.12.1.4 depends on wxcore-0.12.1.4 which failed to install.
> wxcore-0.12.1.4 failed during the configure step. The exception was:
> ExitFailure 1
>
> If wxHaskell could be installed with one cabal command that would be
> incredibly cool :-)
>
> Thanks, Neil

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


Re: [Haskell-cafe] iPhone/Android and Haskell [Was: Embedded funcional programming?]

2010-04-18 Thread Don Stewart
liamoc:
> Our best bet is to compile to ARM native code and then use the NDK to
> talk to the Java APIs.
> Cheers.
> ~Liam

That's great info -- we do have an unregisterised ARM port of GHC in
Debian, iirc. (And the LLVM backend can generate ARM code too)
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] ANNOUNCE: Agata-0.2.0

2010-04-18 Thread Jonas Almström Duregård
> Wow, very cool!
Thank you :)

> This is so helpful I'm surprised it isn't part of
> QuickCheck.  Why isn't it?
Maybe it will be eventually.  It would introduce some package
dependencies though, and as the version number hints it's not exactly
mature code.

2010/4/18 Duane Johnson :
> Wow, very cool!  This is so helpful I'm surprised it isn't part of
> QuickCheck.  Why isn't it?
> Regards,
> Duane Johnson
> On Apr 17, 2010, at 6:43 PM, Jonas Almström Duregård wrote:
>
> {-#LANGUAGE TemplateHaskell #-}
> import Test.QuickCheck
> import Test.AgataTH
>
> data X a b = X [Either a b] deriving Show
> data Y = Y deriving Show
> data Z = Z deriving Show
>
> $(agatath $ deriveall [''X,''Y,''Z])
>
> main = sample (arbitrary :: Gen (X Y Z))
>
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: GUI (was: Re: [Haskell-cafe] DLL on Windows)

2010-04-18 Thread Neil Mitchell
Hi,

I thought this thread suggested that a cabal install wx would now
work? I just tried it and got:

...
generated 2439 constant definitions
ok.
setup.exe: wx-config: does not exist
cabal: Error: some packages failed to install:
wx-0.12.1.4 depends on wxcore-0.12.1.4 which failed to install.
wxcore-0.12.1.4 failed during the configure step. The exception was:
ExitFailure 1

If wxHaskell could be installed with one cabal command that would be
incredibly cool :-)

Thanks, Neil

On Fri, Feb 26, 2010 at 6:26 PM, Jeremy O'Donoghue
 wrote:
> Hi Daniel,
>
> On Fri, 26 Feb 2010 15:31 +0100, "Daniel Fischer"
>  wrote:
>> Am Mittwoch 17 Februar 2010 12:17:10 schrieb Jeremy O'Donoghue:
>> > You're probably correct about the dependencies. I have never tried to
>> > compile wxHaskell against GHC 6.12.1
> [snip]
>>
>> Beating a dead horse, but today I decided to see whether I could install
>> wxHaskell, all it took was a few edits in some .cabal files and one in
>> wxcore's Setup to make it all build with 6.12.1.
>> Still, it's annoying because you have to unpack everything, edit and
>> cabal install in the unpacked directories.
>>
>> Now since I did that, I could upload new verxions of wxdirect, wxcore and
>> wx to hackage, so others could do a simple cabal install wx.
>
> Thanks for doing this: it's great news for everyone who is on GHC
> 6.12.x.
>
>> But I would only do that if I get a go-ahead from somebody authorised
>> (since Jeremy uploaded the previous versions, he'd be qualified, I
>> think).
>
> You're right - I'm probably as qualified as anyone! I've found that
> if a Cabal build works for one person, it's pretty reliable for all
> (this
> is one of the joys of Cabal and (to a lesser extent) the Haskell
> Platform.
>
> I'm quite happy for you to upload updates to Cabal. I'll pull them next
> week and make sure that they get merged to the wxHaskell darcs repo. If
> there are any reports of issues with the uploaded version (which I
> doubt)
> I'll look into them, so you're not taking on any long-term support
> burden.
>
>> Or I could send the edits to Jeremy and let him do the uploading,
>> whatever is preferred.
>
> I have no strong preference - the only thing I want to be sure of is
> that the
> darcs repo stays closely in sync with whatever is in Cabal. If you are
> OK with
> doing the upload, that's great. Otherwise I'll be very happy to do it
> based on
> your patches.
>
> Best regards
> Jeremy
> --
>  Jeremy O'Donoghue
>  jeremy.odonog...@gmail.com
>
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] ANNOUNCE: Agata-0.2.0

2010-04-18 Thread Marc Weber
If this is to be used with QuickCheck maybe it should be named that way.
eg quickcheck-agatath ?

This way its found faster.

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


RE: [Haskell-cafe] GHC Api typechecking

2010-04-18 Thread Phyx
Ah, That's a shame :( I guess for now I'll just write the buffer out to disc
first and switch it later on if the feature gets added.

Thanks,
Phyx

-Original Message-
From: Thomas Schilling [mailto:nomin...@googlemail.com] 
Sent: Sunday, April 18, 2010 18:21
To: Phyx
Cc: Gwern Branwen; haskell-cafe@haskell.org
Subject: Re: [Haskell-cafe] GHC Api typechecking

Looking at the code for GHC, it turns out that your use case is not
supported.  It is not allowed to have in-memory-only files.  If you specify
a buffer it will still try to find the module file on the disk, but it will
(or at least should) use the contents from the specified string buffer.

I've been thinking about changing the Finder (the part that maps module
names to source files and .hi files) to use a notion of a virtual file.
This way, the API client could define how and where data is stored.

On 18 April 2010 11:01, Phyx  wrote:
> Hi,
>
> I checked out how Hint is doing it, but unfortunately they're calling 
> a function in the GHC api's interactive part to typecheck a single
statement, much like :t in ghci, So I can't use it to typecheck whole
modules.
> I've tried working around not being able to construct a TargetId but ran
into another wall.
> I can't find anyway to do dependency analysis on the in-memory target, so
the dependency graph would be empty which is ofcourse a big problem.
>
> Does anyone know if Leksah uses the GHC api for typechecking? And if it
only gives type errors after you save a file?
>
> The code I've been trying is
>
> typeCheckStringOnly :: String -> IO (ApiResults Bool) 
> typeCheckStringOnly contents = handleSourceError processErrors $
>  runGhc (Just libdir) $ do
>    buffer <- liftIO $ stringToStringBuffer contents
>    clock  <- liftIO getClockTime
>    dflags <- getSessionDynFlags
>    setSessionDynFlags dflags
>    let srcLoc   = mkSrcLoc (mkFastString "internal:string") 1 1
>        dynFlag  = defaultDynFlags
>        state    = mkPState buffer srcLoc dynFlag
>        parsed   = unP Parser.parseModule state
>        pkgId    = stringToPackageId "internal"
>        name     = mkModuleName "Unknown"
>        mod'     = mkModule pkgId name
>        location = ModLocation Nothing "" ""
>        summary  = ModSummary mod' HsSrcFile location clock Nothing [] 
> [] "" dynFlag Nothing
>    (\a->setSession $ a { hsc_mod_graph = [summary] }) =<< getSession
>    case parsed of
>       PFailed _ _        -> return $ ApiOk False
>       POk newstate mdata -> do let module' = ParsedModule summary 
> mdata
>                                check <- typecheckModule module'
>                                return $ ApiOk True
>
> this fails with a ghc panic
>
> : panic! (the 'impossible' happened)
>  (GHC version 6.12.1 for i386-unknown-mingw32):
>        no package state yet: call GHC.setSessionDynFlags
>
> Please report this as a GHC bug:  
> http://www.haskell.org/ghc/reportabug
>
> :(
>
> Cheers,
> Phyx
>
> -Original Message-
> From: Gwern Branwen [mailto:gwe...@gmail.com]
> Sent: Saturday, April 17, 2010 20:59
> To: Phyx
> Subject: Re: [Haskell-cafe] GHC Api typechecking
>
> On Sat, Apr 17, 2010 at 1:49 PM, Phyx  wrote:
>> Hi all, I was wondering if someone knows how to do the following:
>>
>>
>>
>> I’m looking to typecheck a string using the GHC Api, where I run into 
>> problems is that I need to construct a Target, but the TargetId only 
>> seem to reference physical files.
>>
>>
>>
>> Ofcourse I can write the string to a file and typecheck that file, 
>> but I would like to do it all in memory and avoid IO if possible.
>>
>>
>>
>> Does anyone know if this is possible?
>>
>>
>>
>> For the record I’m trying to create the target as follows
>>
>>
>>
>> createTarget :: String -> IO Target
>>
>> createTarget content =
>>
>>  do clock  <- getClockTime
>>
>>     buffer <- stringToStringBuffer content
>>
>>     return $ Target { targetId           = TargetModule (mkModuleName
>> "string:internal") ß problem
>>
>>                     , targetAllowObjCode = True
>>
>>                     , targetContents     = Just (buffer,clock)
>>
>>                     }
>>
>>
>>
>> typeCheckStringOnly :: String -> IO (ApiResults Bool)
>>
>> typeCheckStringOnly contents = handleSourceError processErrors $
>>
>> runGhc (Just libdir) $ do
>>
>>     dflags <- getSessionDynFlags
>>
>>     setSessionDynFlags dflags
>>
>>     target <- liftIO $ createTarget contents
>>
>>     addTarget target
>>
>>     load LoadAllTargets
>>
>>     let modName = mkModuleName "string:internal" ß problem again, 
>> don’t know how to create the dependency graph then.
>>
>>     graph <- depanal [modName] True
>>
>>     (\a->setSession $ a { hsc_mod_graph = graph }) =<< getSession
>>
>>     value <- fmap typecheckedSource (typeCheck modName)
>>
>>     return $ ApiOk True
>>
>>
>>
>> Cheers,
>>
>> Phyx
>
> Have you looked at how the Hint package does things?
>
> --
> gwern
>
> ___
> Haskell-Cafe mailing list
> Ha

Re: [Haskell-cafe] Re: help with Haskell programming

2010-04-18 Thread Mujtaba Boori
Thanks a lot guys you were really helpful

func f1 f2 x = (f1 x) || (f2 x) is working for me



On Sun, Apr 18, 2010 at 6:27 PM, Thomas Davie  wrote:

> To do this, you need not just fmap (composition), but also ap, or the
> combined form, liftA2:
>
> func = liftA2 (||)
>
> Bob
>
> On 18 Apr 2010, at 18:21, Keith Sheppard wrote:
>
> > Using composition can be tricky with more than one arg. I just want to
> > be sure you're not really looking for something like:
> >
> >> func :: (a -> Bool) -> (b -> Bool) -> (a -> b -> Bool)
> >
> > keeping with your given type I think you're looking for something like:
> >
> >> func f1 f2 x = (f1 x) || (f2 x)
> >
> > I'm sure there is a nice way to do this with function composition but
> > I still find composition less intuitive than explicit args in cases
> > like this.
> >
> > On Sun, Apr 18, 2010 at 1:00 PM, Mujtaba Boori 
> wrote:
> >> Thanks for helping me but I have another problem (sorry for asking) . I
> >> tried to figure it out .
> >> how about if I want to compare two kind with (&&) (||)  for
> >> func :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
> >>
> >> I tried some thing like
> >> func = ((||) .)
> >> This is the annoying part about Haskell . I can not understand
> composition .
> >>
> >> On Sun, Apr 18, 2010 at 4:35 PM, Mujtaba Boori  >
> >> wrote:
> >>>
> >>> Hello I am kinda newbie in Haskell you can help help me with some
> >>> programming
> >>> I am trying to make function like for example
> >>> func :: (a -> Bool) -> (a -> Bool)
> >>> this function make calculation  and return bool . I want to be able to
> >>> make bool True when It is False and False when it is True while
> returning
> >>> the a.
> >>> Thank you
> >>> --
> >>> Mujtaba Ali Alboori
> >>
> >>
> >>
> >> --
> >> Mujtaba Ali Alboori
> >>
> >> ___
> >> Haskell-Cafe mailing list
> >> Haskell-Cafe@haskell.org
> >> http://www.haskell.org/mailman/listinfo/haskell-cafe
> >>
> >>
> >
> >
> >
> > --
> > keithsheppard.name
> > ___
> > Haskell-Cafe mailing list
> > Haskell-Cafe@haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


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


Re: [Haskell-cafe] Re: help with Haskell programming

2010-04-18 Thread Thomas Davie
To do this, you need not just fmap (composition), but also ap, or the combined 
form, liftA2:

func = liftA2 (||)

Bob

On 18 Apr 2010, at 18:21, Keith Sheppard wrote:

> Using composition can be tricky with more than one arg. I just want to
> be sure you're not really looking for something like:
> 
>> func :: (a -> Bool) -> (b -> Bool) -> (a -> b -> Bool)
> 
> keeping with your given type I think you're looking for something like:
> 
>> func f1 f2 x = (f1 x) || (f2 x)
> 
> I'm sure there is a nice way to do this with function composition but
> I still find composition less intuitive than explicit args in cases
> like this.
> 
> On Sun, Apr 18, 2010 at 1:00 PM, Mujtaba Boori  
> wrote:
>> Thanks for helping me but I have another problem (sorry for asking) . I
>> tried to figure it out .
>> how about if I want to compare two kind with (&&) (||)  for
>> func :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
>> 
>> I tried some thing like
>> func = ((||) .)
>> This is the annoying part about Haskell . I can not understand composition .
>> 
>> On Sun, Apr 18, 2010 at 4:35 PM, Mujtaba Boori 
>> wrote:
>>> 
>>> Hello I am kinda newbie in Haskell you can help help me with some
>>> programming
>>> I am trying to make function like for example
>>> func :: (a -> Bool) -> (a -> Bool)
>>> this function make calculation  and return bool . I want to be able to
>>> make bool True when It is False and False when it is True while returning
>>> the a.
>>> Thank you
>>> --
>>> Mujtaba Ali Alboori
>> 
>> 
>> 
>> --
>> Mujtaba Ali Alboori
>> 
>> ___
>> Haskell-Cafe mailing list
>> Haskell-Cafe@haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>> 
>> 
> 
> 
> 
> -- 
> keithsheppard.name
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

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


Re: [Haskell-cafe] Re: help with Haskell programming

2010-04-18 Thread Sean Leather
> This is the annoying part about Haskell . I can not understand composition
> .
>

One of the ways of understanding composition (and many other functions in
Haskell) is by trying to understand its type. Here it is shown by looking at
the type in the interpreter GHCi.

*Main> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

It's a function that takes three arguments, the first two of which are
functions, and the third is something else. Since (.) is a polymorphic
function, we can tell everything about it (if we ignore certain other
features of Haskell which are not immediately relevant). To give names to
things, let's say composition is declared as follows:

(.) f g x = ...

We know that the type of x must be the same as the type of the argument to
the function f. The result type of f is the same and the input type of g.
The result type of g is the result type of (.). From these observations, we
know that (.) applies g to x and f to the result of that. We can even write
that definition down.

(.) f g x = f (g x)

But, in the case of (.), we don't need to look at the definition to
understand how it works. We can get all the information from the type.

The next step in understanding (.) is seeing how it's used. If you want to
compose two functions, you can use their types to figure out what the result
is. You mentioned (.) (||), so let's look at that first. Then, we can use
GHCi to verify our understanding.

The type of (||) is Bool -> Bool -> Bool or, equivalently, Bool -> (Bool ->
Bool) (since -> is right associative). If we apply (.) to (||), then we can
substitute parts of the type of (||) into the type of (.) to figure out the
type of (.) (||) (which is equivalent to ((||) .).

First, note the types of the two components:

(.) :: (b -> c) -> (a -> b) -> a -> c
(||) :: Bool -> (Bool -> Bool)

Then, since (||) is plugged into the first argument of (.), we bind the
right-hand sides below (from the type of (||)) to the left-hand sides (from
(.)):

b = Bool
c = Bool -> Bool

The resulting type is:

(.) (||) :: (a -> Bool) -> a -> Bool -> Bool

and GHCi agrees. If you are looking for something of this type, then you've
found it. Otherwise, you need to rethink your definition.

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


Re: [Haskell-cafe] Re: help with Haskell programming

2010-04-18 Thread Keith Sheppard
Using composition can be tricky with more than one arg. I just want to
be sure you're not really looking for something like:

> func :: (a -> Bool) -> (b -> Bool) -> (a -> b -> Bool)

keeping with your given type I think you're looking for something like:

> func f1 f2 x = (f1 x) || (f2 x)

I'm sure there is a nice way to do this with function composition but
I still find composition less intuitive than explicit args in cases
like this.

On Sun, Apr 18, 2010 at 1:00 PM, Mujtaba Boori  wrote:
> Thanks for helping me but I have another problem (sorry for asking) . I
> tried to figure it out .
> how about if I want to compare two kind with (&&) (||)  for
> func :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
>
> I tried some thing like
> func = ((||) .)
> This is the annoying part about Haskell . I can not understand composition .
>
> On Sun, Apr 18, 2010 at 4:35 PM, Mujtaba Boori 
> wrote:
>>
>> Hello I am kinda newbie in Haskell you can help help me with some
>> programming
>> I am trying to make function like for example
>> func :: (a -> Bool) -> (a -> Bool)
>> this function make calculation  and return bool . I want to be able to
>> make bool True when It is False and False when it is True while returning
>> the a.
>> Thank you
>> --
>> Mujtaba Ali Alboori
>
>
>
> --
> Mujtaba Ali Alboori
>
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>



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


[Haskell-cafe] Re: help with Haskell programming

2010-04-18 Thread Mujtaba Boori
Thanks for helping me but I have another problem (sorry for asking) . I
tried to figure it out .

how about if I want to compare two kind with (&&) (||)  for

func :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)

I tried some thing like

func = ((||) .)

This is the annoying part about Haskell . I can not understand composition .


On Sun, Apr 18, 2010 at 4:35 PM, Mujtaba Boori wrote:

> Hello I am kinda newbie in Haskell you can help help me with some
> programming
>
> I am trying to make function like for example
>
> func :: (a -> Bool) -> (a -> Bool)
>
> this function make calculation  and return bool . I want to be able to make
> bool True when It is False and False when it is True while returning the a.
>
> Thank you
>
> --
> Mujtaba Ali Alboori
>



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


Re: [Haskell-cafe] problem with cabal on snow leopard

2010-04-18 Thread Carter Schonwald
that is good to know!
thanks
-carter

On Sun, Apr 18, 2010 at 1:09 AM, Ivan Lazar Miljenovic <
ivan.miljeno...@gmail.com> wrote:

> Carter Schonwald  writes:
>
> > the deleting .ghc/ solves that problem, but another problem i've had is
> that
> > when trying to build gtk2hs, I'm unable to find the package.conf file
> that
> > apparently needs to be modfied, and only  a package.conf.d  folder
> are
> > these somehow the same thing or where is it hidden/what am i
> > overlooking?
>
> There is as yet no release of gtk2hs that works with GHC 6.12.1.
>
> --
> Ivan Lazar Miljenovic
> ivan.miljeno...@gmail.com
> IvanMiljenovic.wordpress.com
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] GHC Api typechecking

2010-04-18 Thread Thomas Schilling
Looking at the code for GHC, it turns out that your use case is not
supported.  It is not allowed to have in-memory-only files.  If you
specify a buffer it will still try to find the module file on the
disk, but it will (or at least should) use the contents from the
specified string buffer.

I've been thinking about changing the Finder (the part that maps
module names to source files and .hi files) to use a notion of a
virtual file.  This way, the API client could define how and where
data is stored.

On 18 April 2010 11:01, Phyx  wrote:
> Hi,
>
> I checked out how Hint is doing it, but unfortunately they're calling a 
> function in the GHC api's interactive part to typecheck a single statement, 
> much like :t in ghci,
> So I can't use it to typecheck whole modules.
> I've tried working around not being able to construct a TargetId but ran into 
> another wall.
> I can't find anyway to do dependency analysis on the in-memory target, so the 
> dependency graph would be empty which is ofcourse a big problem.
>
> Does anyone know if Leksah uses the GHC api for typechecking? And if it only 
> gives type errors after you save a file?
>
> The code I've been trying is
>
> typeCheckStringOnly :: String -> IO (ApiResults Bool)
> typeCheckStringOnly contents = handleSourceError processErrors $
>  runGhc (Just libdir) $ do
>    buffer <- liftIO $ stringToStringBuffer contents
>    clock  <- liftIO getClockTime
>    dflags <- getSessionDynFlags
>    setSessionDynFlags dflags
>    let srcLoc   = mkSrcLoc (mkFastString "internal:string") 1 1
>        dynFlag  = defaultDynFlags
>        state    = mkPState buffer srcLoc dynFlag
>        parsed   = unP Parser.parseModule state
>        pkgId    = stringToPackageId "internal"
>        name     = mkModuleName "Unknown"
>        mod'     = mkModule pkgId name
>        location = ModLocation Nothing "" ""
>        summary  = ModSummary mod' HsSrcFile location clock Nothing [] [] "" 
> dynFlag Nothing
>    (\a->setSession $ a { hsc_mod_graph = [summary] }) =<< getSession
>    case parsed of
>       PFailed _ _        -> return $ ApiOk False
>       POk newstate mdata -> do let module' = ParsedModule summary mdata
>                                check <- typecheckModule module'
>                                return $ ApiOk True
>
> this fails with a ghc panic
>
> : panic! (the 'impossible' happened)
>  (GHC version 6.12.1 for i386-unknown-mingw32):
>        no package state yet: call GHC.setSessionDynFlags
>
> Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
>
> :(
>
> Cheers,
> Phyx
>
> -Original Message-
> From: Gwern Branwen [mailto:gwe...@gmail.com]
> Sent: Saturday, April 17, 2010 20:59
> To: Phyx
> Subject: Re: [Haskell-cafe] GHC Api typechecking
>
> On Sat, Apr 17, 2010 at 1:49 PM, Phyx  wrote:
>> Hi all, I was wondering if someone knows how to do the following:
>>
>>
>>
>> I’m looking to typecheck a string using the GHC Api, where I run into
>> problems is that I need to construct a Target, but the TargetId only seem to
>> reference physical files.
>>
>>
>>
>> Ofcourse I can write the string to a file and typecheck that file, but I
>> would like to do it all in memory and avoid IO if possible.
>>
>>
>>
>> Does anyone know if this is possible?
>>
>>
>>
>> For the record I’m trying to create the target as follows
>>
>>
>>
>> createTarget :: String -> IO Target
>>
>> createTarget content =
>>
>>  do clock  <- getClockTime
>>
>>     buffer <- stringToStringBuffer content
>>
>>     return $ Target { targetId           = TargetModule (mkModuleName
>> "string:internal") ß problem
>>
>>                     , targetAllowObjCode = True
>>
>>                     , targetContents     = Just (buffer,clock)
>>
>>                     }
>>
>>
>>
>> typeCheckStringOnly :: String -> IO (ApiResults Bool)
>>
>> typeCheckStringOnly contents = handleSourceError processErrors $
>>
>> runGhc (Just libdir) $ do
>>
>>     dflags <- getSessionDynFlags
>>
>>     setSessionDynFlags dflags
>>
>>     target <- liftIO $ createTarget contents
>>
>>     addTarget target
>>
>>     load LoadAllTargets
>>
>>     let modName = mkModuleName "string:internal" ß problem again, don’t know
>> how to create the dependency graph then.
>>
>>     graph <- depanal [modName] True
>>
>>     (\a->setSession $ a { hsc_mod_graph = graph }) =<< getSession
>>
>>     value <- fmap typecheckedSource (typeCheck modName)
>>
>>     return $ ApiOk True
>>
>>
>>
>> Cheers,
>>
>> Phyx
>
> Have you looked at how the Hint package does things?
>
> --
> gwern
>
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Push the envelope.  Watch it bend.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: US Patent for the idea ...

2010-04-18 Thread Steve Schafer
On Sat, 17 Apr 2010 23:33:48 +0100, you wrote:

>I think in all fairness to examiners that in a way they have an 
>impossible job due to the fact that what is a clever idea to one 
>programmer will be a trivial idea to another: the field is so huge and 
>people have such different experiences.

In US patent law, algorithms themselves were deemed unpatentable quite
some time ago (I believe that European patent law is more liberal in
that regard, but I don't know all of the details). So a lot of the
discussion concerning software patents in this country has been on
whether or not software can be considered to be an "invention" separate
from the underlying algorithms used in its construction. Since those of
us who work with software realize that software is often little more
than a restatement of an algorithm in a way that is suitable for a
computing device to "understand," it's very difficult to draw a clear
line between the two.

People do occasionally come up with truly novel ideas about how to
perform some software task, but it seems to me that unless the novelty
involves some aspect that can be separated from the algorithmic approach
used, it shouldn't be patentable. For example, quicksort, though
certainly novel, is purely an algorithm, so it shouldn't be
patentable--it is completely independent of any "tangible"
implementation. But a sorting technique that is optimized for large
datasets that can't be held entirely in volatile memory, and explicitly
takes advantage of known characteristics of disk latency, etc., could
very well be patentable.

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


Re: [Haskell-cafe] help with Haskell programming

2010-04-18 Thread Keith Sheppard
Hello Mujtaba,

I wonder is this homework? If that's the case there is nothing wrong
with asking homework related questions but they should probably be
marked as such.

I think the most straight forward solution will use function
composition (.) and the (not) function

-keith

On Sun, Apr 18, 2010 at 11:35 AM, Mujtaba Boori  wrote:
> Hello I am kinda newbie in Haskell you can help help me with some
> programming
> I am trying to make function like for example
> func :: (a -> Bool) -> (a -> Bool)
> this function make calculation  and return bool . I want to be able to make
> bool True when It is False and False when it is True while returning the a.
> Thank you
> --
> Mujtaba Ali Alboori
>
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>



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


Re: [Haskell-cafe] help with Haskell programming

2010-04-18 Thread Thomas Davie
I'm not certain exactly what you mean, but I *think* you mean:

func :: (a -> Bool) -> (a -> Bool)
func = (not .)

Bob

On 18 Apr 2010, at 16:35, Mujtaba Boori wrote:

> Hello I am kinda newbie in Haskell you can help help me with some programming
> 
> I am trying to make function like for example 
> 
> func :: (a -> Bool) -> (a -> Bool)
> 
> this function make calculation  and return bool . I want to be able to make 
> bool True when It is False and False when it is True while returning the a. 
> 
> Thank you 
> 
> -- 
> Mujtaba Ali Alboori
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

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


[Haskell-cafe] help with Haskell programming

2010-04-18 Thread Mujtaba Boori
Hello I am kinda newbie in Haskell you can help help me with some
programming

I am trying to make function like for example

func :: (a -> Bool) -> (a -> Bool)

this function make calculation  and return bool . I want to be able to make
bool True when It is False and False when it is True while returning the a.

Thank you

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


Re: [Haskell-cafe] Functional Dependencies conflicts

2010-04-18 Thread Casey McCann
On Sun, Apr 18, 2010 at 5:01 AM, Limestraël  wrote:
> There must be some kind of a private joke I don't get...
>
> BTW, all you've said is pretty scaring...

And somewhat exaggerated, of course. Reasonable uses exist for all
three extensions, but they're firmly in the category of "avoid unless
you know what you're doing". Well, at least two of them are, I'm not
sure when IncoherentInstances is a good idea (if ever). It's worth
experimenting with them in some toy code for a while before trying to
use them "for real".

In any case, if you do use those extensions, they can usually be
isolated to some extent. A library can use them internally without
requiring client code to enable them, and in an application use can be
restricted to just a few modules, enabling the extensions on a
per-module basis.

My rule of thumb is the "sausage principle"--outside code should be
able to act as if GHC somewhere picked up a more expressive means of
specifying instance heads and/or a smarter termination checker and
carry on blissfully ignorant of by what providence the instances were
obtained. That is, if one eats sausage, it is best to not dwell on how
it is made, so to speak.

> It's strange I can't declare a generic instance for Binary types... I
> thought I was trying to do something quite common in Haskell.
> Apparently I'm still a young padawan with many things to learn.
> Anyway, it's not the first time I get worked up with multi-param typeclasses
> and functionnal dependencies

What you're trying to do is perfectly reasonable, unfortunately it
doesn't mesh well with how type classes/instances work. A lot of the
reason why the distressing extensions under discussion exist at all is
working around those limitations.

Type families are a start on cleaning up one aspect of the type class
system--namely, the awkwardness of functional dependencies.
Unfortunately, type families don't really help on the "how to write
generic but not completely general instances" right now, and in fact
are incompatible with overlapping instances, making some things
impossible! I think there have been some discussions of proposals
toward fixing this as well, but I'm not sure what the status of those
are.

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


Re: [Haskell-cafe] Functional Dependencies conflicts

2010-04-18 Thread Sebastian Fischer


On Apr 18, 2010, at 11:01 AM, Limestraël wrote:

It's strange I can't declare a generic instance for Binary types...  
I thought I was trying to do something quite common in Haskell.


A common workaround is to define a newtype like this

newtype GenericBinary a = GB { fromGB :: a }

and an instance like this

instance Binary a => Binarizable (GenericBinary a) a where
  toBinary = fromGB

which only needs FlexibleInstances enabled.

You can then 'tag' Binary types for which you want to use the generic  
default instance above with the GB newtype constructor. Whether this  
is less of a pain than implementing a Binarizable instance for each  
Binary type is a different question..


Sebastian

--
Underestimating the novelty of the future is a time-honored tradition.
(D.G.)



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


Re: [Haskell-cafe] Confusions about the Haskell Platform (for Mac)

2010-04-18 Thread Ivan Lazar Miljenovic
Sean Leather  writes:
> Personally, I prefer to separate the name of the language from the name of
> the development tools, because I think that causes unnecessary confusion.
> End-users do not need to care about Haskell, unlike Java since they need the
> JRE, so potential developers and students are the audience. This group needs
> the Haskell Platform for developing with Haskell, and having the tools
> referred to as "Haskell Platform" is clear enough (imho) without having to
> call the tools "Haskell."

I think the partial confusion here is that most "newer" languages have
the same name as their defacto implementation (Python [though the
implementation is technically CPython], Perl, Ruby, etc.).

Whilst Haskell has other implementations apart from GHC, none of the
others are as featureful, etc.  So pretty much if you want "Haskell",
then you want GHC.

-- 
Ivan Lazar Miljenovic
ivan.miljeno...@gmail.com
IvanMiljenovic.wordpress.com
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Confusions about the Haskell Platform (for Mac)

2010-04-18 Thread Sean Leather
On Sun, Apr 18, 2010 at 01:46, Don Stewart wrote:

> leather:
> >
> > 2. What is the difference between "Haskell" and the "Haskell Platform"? I
> see
> > one or the other in various places. To get from www.haskell.org to
> downloading
> > the Mac software, I go through "Download Haskell," "Get the Haskell
> Platform >
> > Mac," and "Download Haskell for Mac OS X (intel)."
>
> Well, for one, we have characterized the difference between GHC and the
> Haskell Platform as:
>
>GHC is to the HP  as  Linux Kernel is to Linux
>
> Now, "Haskell" for newcomers might mean "toolchain on my machine" --
> which is the Haskell Platform. Or it might mean the language.
>
> We try to ensure advertising for the HP makes it simple: "Download
> Haskell", but documentation pages carefully describe the fact that the
> HP is a development environment for the Haskell language.
>

It just occurred to me to check what Sun/Oracle does for Java. I guess what
is on haskell.org is no worse than what is on http://java.com/en/download/ .
But perhaps answering such questions as "What is Haskell?" or "Why download
the Haskell Platform?" as well as a short blurb about the use of the terms
Haskell and Haskell Platform would help.

Personally, I prefer to separate the name of the language from the name of
the development tools, because I think that causes unnecessary confusion.
End-users do not need to care about Haskell, unlike Java since they need the
JRE, so potential developers and students are the audience. This group needs
the Haskell Platform for developing with Haskell, and having the tools
referred to as "Haskell Platform" is clear enough (imho) without having to
call the tools "Haskell."

In the end, whatever the choice, the language on haskell.org should probably
be somewhat more consistent.

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


Re: [Haskell-cafe] Embedded funcional programming?

2010-04-18 Thread Malcolm Wallace

I'm new to this, so the only problems I see are finding a compiler
that targets the platform (ARM7, for instance, or others) and
uploading the compiled firmware to the device.



You might find that the extra RAM requirements for a non-C language
becomes a problem - especially when it manifestly translates to extra
euros/dollars on the "BOM" costs (aka bill-of-materials).


About 15 years ago, I wrote my PhD Thesis on the topic of "Functional  
Programming and Embedded Systems".

ftp://ftp.cs.york.ac.uk/pub/malcolm/thesis.html

Back then, I was using the Gofer interpreter (a forerunner of Hugs),  
compiling Haskell to bytecode, and targetted at the M68000.  Bytecode  
is one important way to reduce the RAM requirements.  An interpreter  
can also be quite parsimonious with heap allocation - as I recall, I  
extended the embedded board from 256kb of RAM to 768kb (yes, note  
kilobytes, not Mb) in anticipation of heap pressure, but in the end  
came nowhere near needing all of that.


Regards,
Malcolm

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


RE: [Haskell-cafe] GHC Api typechecking

2010-04-18 Thread Phyx
Hi,

I checked out how Hint is doing it, but unfortunately they're calling a 
function in the GHC api's interactive part to typecheck a single statement, 
much like :t in ghci,
So I can't use it to typecheck whole modules.
I've tried working around not being able to construct a TargetId but ran into 
another wall.
I can't find anyway to do dependency analysis on the in-memory target, so the 
dependency graph would be empty which is ofcourse a big problem.

Does anyone know if Leksah uses the GHC api for typechecking? And if it only 
gives type errors after you save a file?

The code I've been trying is

typeCheckStringOnly :: String -> IO (ApiResults Bool)
typeCheckStringOnly contents = handleSourceError processErrors $
 runGhc (Just libdir) $ do
buffer <- liftIO $ stringToStringBuffer contents
clock  <- liftIO getClockTime
dflags <- getSessionDynFlags
setSessionDynFlags dflags
let srcLoc   = mkSrcLoc (mkFastString "internal:string") 1 1
dynFlag  = defaultDynFlags 
state= mkPState buffer srcLoc dynFlag
parsed   = unP Parser.parseModule state
pkgId= stringToPackageId "internal"
name = mkModuleName "Unknown"
mod' = mkModule pkgId name
location = ModLocation Nothing "" ""
summary  = ModSummary mod' HsSrcFile location clock Nothing [] [] "" 
dynFlag Nothing
(\a->setSession $ a { hsc_mod_graph = [summary] }) =<< getSession
case parsed of
   PFailed _ _-> return $ ApiOk False
   POk newstate mdata -> do let module' = ParsedModule summary mdata
check <- typecheckModule module'
return $ ApiOk True

this fails with a ghc panic

: panic! (the 'impossible' happened)
  (GHC version 6.12.1 for i386-unknown-mingw32):
no package state yet: call GHC.setSessionDynFlags

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

:(

Cheers,
Phyx

-Original Message-
From: Gwern Branwen [mailto:gwe...@gmail.com] 
Sent: Saturday, April 17, 2010 20:59
To: Phyx
Subject: Re: [Haskell-cafe] GHC Api typechecking

On Sat, Apr 17, 2010 at 1:49 PM, Phyx  wrote:
> Hi all, I was wondering if someone knows how to do the following:
>
>
>
> I’m looking to typecheck a string using the GHC Api, where I run into
> problems is that I need to construct a Target, but the TargetId only seem to
> reference physical files.
>
>
>
> Ofcourse I can write the string to a file and typecheck that file, but I
> would like to do it all in memory and avoid IO if possible.
>
>
>
> Does anyone know if this is possible?
>
>
>
> For the record I’m trying to create the target as follows
>
>
>
> createTarget :: String -> IO Target
>
> createTarget content =
>
>  do clock  <- getClockTime
>
> buffer <- stringToStringBuffer content
>
> return $ Target { targetId   = TargetModule (mkModuleName
> "string:internal") ß problem
>
> , targetAllowObjCode = True
>
> , targetContents = Just (buffer,clock)
>
> }
>
>
>
> typeCheckStringOnly :: String -> IO (ApiResults Bool)
>
> typeCheckStringOnly contents = handleSourceError processErrors $
>
> runGhc (Just libdir) $ do
>
> dflags <- getSessionDynFlags
>
> setSessionDynFlags dflags
>
> target <- liftIO $ createTarget contents
>
> addTarget target
>
> load LoadAllTargets
>
> let modName = mkModuleName "string:internal" ß problem again, don’t know
> how to create the dependency graph then.
>
> graph <- depanal [modName] True
>
> (\a->setSession $ a { hsc_mod_graph = graph }) =<< getSession
>
> value <- fmap typecheckedSource (typeCheck modName)
>
> return $ ApiOk True
>
>
>
> Cheers,
>
> Phyx

Have you looked at how the Hint package does things?

-- 
gwern

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


Re: [Haskell-cafe] Embedded funcional programming?

2010-04-18 Thread Patai Gergely
Hello,

> I'm new to this, so the only problems I see are finding a compiler
> that targets the platform (ARM7, for instance, or others) and
> uploading the compiled firmware to the device.
I used Hume [1] to program Mindstorms NXT robots (ARM7) as well as Tmote
Sky sensors (MSP430). In both cases I ported the HAM virtual machine and
interpreted bytecode. In the case of NXT I used the hardware layer of
leJOS [2], simply ripping out the JVM and replacing it with HAM. As for
the Tmote Sky, the VM sat on top of Contiki [3], so it was possible to
send HAM bytecode over the air, and the sensor would intercept it, stop
the currently running program and execute the new one. Hume can also be
compiled directly to C, and I got it to run on a home-brew LPC2106 based
embedded platform (also with an ARM7 core) we use in education. The main
problem was the size of the generated code. See [4] for details.

My overall impression is that Hume could be a very nice language to
program embedded systems with, given proper tool support (for starters,
it's really crying for a visual editor) and a high-quality compiler.

Gergely

[1] http://www-fp.cs.st-andrews.ac.uk/hume/index.shtml
[2] http://lejos.sourceforge.net/
[3] http://www.sics.se/contiki/
[4] http://www-fp.cs.st-andrews.ac.uk/hume/papers/pg_thesis/

-- 
http://www.fastmail.fm - Email service worth paying for. Try it for free

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


Re: [Haskell-cafe] GHC, odd concurrency space leak

2010-04-18 Thread Bertram Felgenhauer
Bulat Ziganshin wrote:
> > This expands as
> 
> > always a = a >> always a
> >  = a >> a >> always a
> >  = a >> a >> a >> always a
> > ...
> > where each >> application is represented by a newly allocated object
> > (or several, I have not looked at it in detail) on the heap.
> 
> why you think so?

At the time I wrote this, because it explains the space leak and because
the space leak disappears if I address this precise issue. But I've
since verified the theory by inspecting Core and Cmm code.

> i always thought that >> in ghc just sequentially
> executes statements, the RealWorld magic exists only at compile-time

Yes, that's what happens once (>>) gets actually executed in IO. But
this fact and the RealWorld token have nothing to do with the whole
issue, which is about accumulating a chain of IO actions that have not
yet been executed.

I'll continue to write a >> b, which in IO, modulo newtypes, stands for

   \(s :: RealWorld#) -> case a s of (s', _) -> b s'

The fact that the state token disappears at runtime does not change
that this is a closure, represented by a (function) heap node.

So we have some IO action

let x = always a

Now we run x, but also hold onto the corresponding thunk to reuse it
later, say

let x = always a
in  x >> x

In order to execute that, x is forced, and evaluated to

let x = let x' = always a in a >> x'
in  x >> x

or, equivalently,

let x' = always a
x  = a >> x'
in  x >> x

Then the first step of the IO action is performed, resulting in

let x' = always a
x  = a >> x'
in  x' >> x

And now the same reduction happens again for x',

let x2 = always a
x' = a >> x2
x  = a >> x'
in  x2 >> x

and then again for x2,

let x3 = always a
x2 = a >> x3
x' = a >> x2
x  = a >> x'
in  x2 >> x

and so on, ad infinitum. This leaks memory because x, x', x2 etc. can't
be garbage collected - there's still a reference to x. Note that this
also explains why the space leak disappears if we remove the 'forever'
in the spawner thread in the original example.

This would not happen if the 'always a' was reused, i.e. if the code
tied a knot as

   let act = a >> act in act

does, but as you can see in the Core (and even Cmm if you look closely
enough) that does not happen in those cases where the code leaks memory.

HTH,

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


Re: [Haskell-cafe] Functional Dependencies conflicts

2010-04-18 Thread Limestraël
There must be some kind of a private joke I don't get...

BTW, all you've said is pretty scaring...

It's strange I can't declare a generic instance for Binary types... I
thought I was trying to do something quite common in Haskell.
Apparently I'm still a young padawan with many things to learn.
Anyway, it's not the first time I get worked up with multi-param typeclasses
and functionnal dependencies

2010/4/18 Ivan Lazar Miljenovic 

> Daniel Fischer  writes:
> > Wow. Makes me wonder what quicksilver says about IncoherentInstances.
>
> Not quicksilver, but according to lambdabot:
>
>  @quote incoherent
>  sproingie says: * enables IncoherentInstances and ends up
>with Sarah Palin in his living room
>
> --
> Ivan Lazar Miljenovic
> ivan.miljeno...@gmail.com
> IvanMiljenovic.wordpress.com
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re[2]: [Haskell-cafe] GHC, odd concurrency space leak

2010-04-18 Thread Bulat Ziganshin
Hello Bertram,

Sunday, April 18, 2010, 3:36:31 AM, you wrote:

> This expands as

> always a = a >> always a
>  = a >> a >> always a
>  = a >> a >> a >> always a
> ...
> where each >> application is represented by a newly allocated object
> (or several, I have not looked at it in detail) on the heap.

why you think so? i always thought that >> in ghc just sequentially
executes statements, the RealWorld magic exists only at compile-time


-- 
Best regards,
 Bulatmailto:bulat.zigans...@gmail.com

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