Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-12-14 Thread Henning Thielemann


On Mon, 13 Dec 2010, John Meacham wrote:


A better plan would be to start depending on 'haskell2010' or
'haskell98' and get rid of explicit dependencies on 'base' altogether.
Since those are standardized between compilers.


I admit that once in the past I have replaced all dependencies on 
'haskell98' by dependencies on 'base' in order to consistently use modules 
from the hierarchical namespace.


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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-12-13 Thread John Meacham
A better plan would be to start depending on 'haskell2010' or
'haskell98' and get rid of explicit dependencies on 'base' altogether.
Since those are standardized between compilers.

John

On Tue, Dec 7, 2010 at 6:59 PM, Brandon S Allbery KF8NH
allb...@ece.cmu.edu wrote:
 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA1

 On 12/7/10 06:00 , Henning Thielemann wrote:
 Brandon S Allbery KF8NH wrote:
 Since the base package is (with good reason) part of the compiler, anyone
 smart enough to get that to work is smart enough to edit the cabal file.

 There are good reasons for not only bundling 'ghc' package with GHC, but
 'base', too? I assumed it is intended to untangle 'base' and GHC in future,
 such that 'base' can be used with JHC, UHC, Hugs.

 I seem to recall that the logistics of that change have been proving a bit
 difficult in practice, and as such it's probably not going to happen very 
 soon.

 - --
 brandon s. allbery     [linux,solaris,freebsd,perl]      allb...@kf8nh.com
 system administrator  [openafs,heimdal,too many hats]  allb...@ece.cmu.edu
 electrical and computer engineering, carnegie mellon university      KF8NH
 -BEGIN PGP SIGNATURE-
 Version: GnuPG v2.0.10 (Darwin)
 Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

 iEYEARECAAYFAkz+9HYACgkQIn7hlCsL25XXPQCfa/x9ZyhUmN88vu3/EPv8Tjhq
 +5EAniBq3G9gto/IC8kyYFP2rAjTxB/4
 =LnDx
 -END PGP SIGNATURE-

 ___
 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] Conditional compilation for different versions of GHC?

2010-12-13 Thread Duncan Coutts
On 1 December 2010 03:54, Michael Snoyman mich...@snoyman.com wrote:
 On Wed, Dec 1, 2010 at 4:07 AM, Thomas Schilling
 nomin...@googlemail.com wrote:
 I think a nicer way to solve that issue is to use Cabal's MIN_VERSION macros.

  1. Add CPP to your extensions.  This will cause cabal to
 auto-generate a file with MIN_VERSION_pkg macros for each pkg in
 build-depends.

  2. GHC 6.12.* comes with template-haskell 2.4, so to test for that use:

 #ifdef MIN_VERSION_template_haskell(2,4,0)
  .. ghc-6.12.* code here.
 #endif

 This should make it more transparent to the user.

 Also, I think

 #if GHC7
 ...
 #endif

 is more transparent than a check on template-haskell.

Note that in many cases it is inappropriate to use the ghc version as
a proxy for a library version since most libraries are upgradable
independently of GHC.

Duncan

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-12-07 Thread Brandon S Allbery KF8NH
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 12/7/10 06:00 , Henning Thielemann wrote:
 Brandon S Allbery KF8NH wrote:
 Since the base package is (with good reason) part of the compiler, anyone
 smart enough to get that to work is smart enough to edit the cabal file.
 
 There are good reasons for not only bundling 'ghc' package with GHC, but
 'base', too? I assumed it is intended to untangle 'base' and GHC in future,
 such that 'base' can be used with JHC, UHC, Hugs.

I seem to recall that the logistics of that change have been proving a bit
difficult in practice, and as such it's probably not going to happen very soon.

- -- 
brandon s. allbery [linux,solaris,freebsd,perl]  allb...@kf8nh.com
system administrator  [openafs,heimdal,too many hats]  allb...@ece.cmu.edu
electrical and computer engineering, carnegie mellon university  KF8NH
-BEGIN PGP SIGNATURE-
Version: GnuPG v2.0.10 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkz+9HYACgkQIn7hlCsL25XXPQCfa/x9ZyhUmN88vu3/EPv8Tjhq
+5EAniBq3G9gto/IC8kyYFP2rAjTxB/4
=LnDx
-END PGP SIGNATURE-

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-12-05 Thread Henning Thielemann
Jason Dagit schrieb:

 I see that others have provided answers on here, but another way is to
 change the check from:
 
if flag(ghc7)
build-depends:   base  = 4.35
cpp-options: -DGHC7
else
build-depends:   base  = 4  4.3
 
 to this:
if impl(ghc = 7)
build-depends:   base  = 4.35
cpp-options: -DGHC7
else
build-depends:   base  = 4  4.3

Isn't it better to move the dependency on 'base' out of the If block? I
mean, someone might succeed to use GHC-7 with base-4.2 or GHC7 or a
different compiler with base-4.3.


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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-12-05 Thread Brandon S Allbery KF8NH
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 12/5/10 17:05 , Henning Thielemann wrote:
 Isn't it better to move the dependency on 'base' out of the If block? I
 mean, someone might succeed to use GHC-7 with base-4.2 or GHC7 or a
 different compiler with base-4.3.

Since the base package is (with good reason) part of the compiler, anyone
smart enough to get that to work is smart enough to edit the cabal file.

- -- 
brandon s. allbery [linux,solaris,freebsd,perl]  allb...@kf8nh.com
system administrator  [openafs,heimdal,too many hats]  allb...@ece.cmu.edu
electrical and computer engineering, carnegie mellon university  KF8NH
-BEGIN PGP SIGNATURE-
Version: GnuPG v2.0.10 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkz8GukACgkQIn7hlCsL25WTxACfc4k/3GoQr402TbVFmabRD7sJ
7WEAoMnmLeaKGfjQdjdP4K60Ch6g72md
=LZuU
-END PGP SIGNATURE-

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


Re: [Haskell-cafe] Conditional compilation for different versionsof GHC?

2010-12-01 Thread Claus Reinke

This is obviously a personal preference issue, but I try to avoid the
Cabal macros since they don't let my code run outside the context of
Cabal. I often times like to have a test suite that I can just use
with runhaskell, and (unless you can tell me otherwise) I can't run it
anymore.

Also, I think

#if GHC7
...
#endif

is more transparent than a check on template-haskell.


Just in case this hasn't been mentioned yet: if you want to be
independent of cabal, there is the old standby

__GLASGOW_HASKELL__
http://haskell.org/ghc/docs/latest/html/users_guide/options-phases.html#c-pre-processor

Claus



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


Re: [Haskell-cafe] Conditional compilation for different versionsof GHC?

2010-12-01 Thread Michael Snoyman
On Wed, Dec 1, 2010 at 6:58 PM, Claus Reinke claus.rei...@talk21.com wrote:
 This is obviously a personal preference issue, but I try to avoid the
 Cabal macros since they don't let my code run outside the context of
 Cabal. I often times like to have a test suite that I can just use
 with runhaskell, and (unless you can tell me otherwise) I can't run it
 anymore.

 Also, I think

 #if GHC7
 ...
 #endif

 is more transparent than a check on template-haskell.

 Just in case this hasn't been mentioned yet: if you want to be
 independent of cabal, there is the old standby

 __GLASGOW_HASKELL__
 http://haskell.org/ghc/docs/latest/html/users_guide/options-phases.html#c-pre-processor

Well, I think this is the official right approach. I was not aware of
that, thank you Claus.

Michael

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-30 Thread Jason Dagit
On Sat, Nov 27, 2010 at 9:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:

 Thanks Michael,

 So the user should use `cabal install --flags -ghc7 package-name` to
 install the package, if I'm not mistaken?

 Will it work if the package is installed as a dependency? Will the
 flag environment be passed down from the root package?

 Is there a way to detect GHC version automatically?


I see that others have provided answers on here, but another way is to
change the check from:

   if flag(ghc7)
   build-depends:   base  = 4.35
   cpp-options: -DGHC7
   else
   build-depends:   base  = 4  4.3

to this:
   if impl(ghc = 7)
   build-depends:   base  = 4.35
   cpp-options: -DGHC7
   else
   build-depends:   base  = 4  4.3

I hope that helps,
Jason
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-30 Thread Thomas Schilling
I think a nicer way to solve that issue is to use Cabal's MIN_VERSION macros.

 1. Add CPP to your extensions.  This will cause cabal to
auto-generate a file with MIN_VERSION_pkg macros for each pkg in
build-depends.

 2. GHC 6.12.* comes with template-haskell 2.4, so to test for that use:

#ifdef MIN_VERSION_template_haskell(2,4,0)
  .. ghc-6.12.* code here.
#endif

This should make it more transparent to the user.

On 27 November 2010 16:59, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: quoteType 
 and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 --
 jinjing
 ___
 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] Conditional compilation for different versions of GHC?

2010-11-30 Thread Michael Snoyman
On Wed, Dec 1, 2010 at 4:07 AM, Thomas Schilling
nomin...@googlemail.com wrote:
 I think a nicer way to solve that issue is to use Cabal's MIN_VERSION macros.

  1. Add CPP to your extensions.  This will cause cabal to
 auto-generate a file with MIN_VERSION_pkg macros for each pkg in
 build-depends.

  2. GHC 6.12.* comes with template-haskell 2.4, so to test for that use:

 #ifdef MIN_VERSION_template_haskell(2,4,0)
  .. ghc-6.12.* code here.
 #endif

 This should make it more transparent to the user.

This is obviously a personal preference issue, but I try to avoid the
Cabal macros since they don't let my code run outside the context of
Cabal. I often times like to have a test suite that I can just use
with runhaskell, and (unless you can tell me otherwise) I can't run it
anymore.

Also, I think

#if GHC7
...
#endif

is more transparent than a check on template-haskell.

Michael

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Michael Snoyman
On Sat, Nov 27, 2010 at 6:59 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: quoteType 
 and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

Hi Jinjing,

I've done this in Yesod. I'm not sure if it's the best way, but
basically I've added a ghc7 flag to the cabal file, and a block for
the library that reads:

if flag(ghc7)
build-depends:   base  = 4.35
cpp-options: -DGHC7
else
build-depends:   base  = 4  4.3

Then whenever I want to quasi-quote in the code, I write:

#if GHC7
[quasiquoter|
#else
[$quasiquoter|
#endif

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Jinjing Wang
Thanks Michael,

So the user should use `cabal install --flags -ghc7 package-name` to
install the package, if I'm not mistaken?

Will it work if the package is installed as a dependency? Will the
flag environment be passed down from the root package?

Is there a way to detect GHC version automatically?

: )

Best,


On Sun, Nov 28, 2010 at 1:32 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Sat, Nov 27, 2010 at 6:59 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Hi Jinjing,

 I've done this in Yesod. I'm not sure if it's the best way, but
 basically I've added a ghc7 flag to the cabal file, and a block for
 the library that reads:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

 Then whenever I want to quasi-quote in the code, I write:

 #if GHC7
    [quasiquoter|
 #else
    [$quasiquoter|
 #endif

 Michael




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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Jinjing Wang
Sorry, should be `cabal install --flags=ghc7 package-name`.

On Sun, Nov 28, 2010 at 1:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Thanks Michael,

 So the user should use `cabal install --flags -ghc7 package-name` to
 install the package, if I'm not mistaken?

 Will it work if the package is installed as a dependency? Will the
 flag environment be passed down from the root package?

 Is there a way to detect GHC version automatically?

 : )

 Best,


 On Sun, Nov 28, 2010 at 1:32 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Sat, Nov 27, 2010 at 6:59 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Hi Jinjing,

 I've done this in Yesod. I'm not sure if it's the best way, but
 basically I've added a ghc7 flag to the cabal file, and a block for
 the library that reads:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

 Then whenever I want to quasi-quote in the code, I write:

 #if GHC7
    [quasiquoter|
 #else
    [$quasiquoter|
 #endif

 Michael




 --
 jinjing




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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Michael Snoyman
No, the user doesn't need to do anything. By splitting up the base
range into pre-7 and post-7, cabal automatically applies the ghc7 flag
(and thus adds the GHC7 CPP declaration) as appropriate.

Michael

On Sat, Nov 27, 2010 at 7:59 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Thanks Michael,

 So the user should use `cabal install --flags -ghc7 package-name` to
 install the package, if I'm not mistaken?

 Will it work if the package is installed as a dependency? Will the
 flag environment be passed down from the root package?

 Is there a way to detect GHC version automatically?

 : )

 Best,


 On Sun, Nov 28, 2010 at 1:32 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Sat, Nov 27, 2010 at 6:59 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Hi Jinjing,

 I've done this in Yesod. I'm not sure if it's the best way, but
 basically I've added a ghc7 flag to the cabal file, and a block for
 the library that reads:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

 Then whenever I want to quasi-quote in the code, I write:

 #if GHC7
    [quasiquoter|
 #else
    [$quasiquoter|
 #endif

 Michael




 --
 jinjing

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Antoine Latter
On Sat, Nov 27, 2010 at 10:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: quoteType 
 and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

Can you just not set those fields? Then the code should work as-is for
both versions. You'll get warnings for GHC 7, I think.

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Michael Snoyman
On Sat, Nov 27, 2010 at 9:41 PM, Antoine Latter aslat...@gmail.com wrote:
 On Sat, Nov 27, 2010 at 10:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Can you just not set those fields? Then the code should work as-is for
 both versions. You'll get warnings for GHC 7, I think.

Sorry Jinjing, I didn't read your original email carefully enough.
Antoine is absolutely correct, this is the better way to deal with
defining a quasiquoter. My suggestion is only necessary if you want to
*use* a quasiquoter.

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Jinjing Wang
Hi Michael, you are absolutely correct, cabal did set the flags automatically.

To sum up, here's what needs to be done:

* add `flag ghc7` as a field in cabal
* add:

if flag(ghc7)
build-depends:   base  = 4.35
cpp-options: -DGHC7
else
build-depends:   base  = 4  4.3

   in library field in cabal

* add `{-# LANGUAGE CPP #-}` in source file
* add

#if GHC7
x

#else
y

#endif


 Hi Antonine, I don't know how to not set those fields in the
constructor.. as a QQ noob, I'm just hacking on some legacy code. This
code doesn't compile in GHC7, so I have to do this trick.

* https://github.com/nfjinjing/mps/blob/master/src/MPS/TH.hs

Best,

On Sun, Nov 28, 2010 at 3:48 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Sat, Nov 27, 2010 at 9:41 PM, Antoine Latter aslat...@gmail.com wrote:
 On Sat, Nov 27, 2010 at 10:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Can you just not set those fields? Then the code should work as-is for
 both versions. You'll get warnings for GHC 7, I think.

 Sorry Jinjing, I didn't read your original email carefully enough.
 Antoine is absolutely correct, this is the better way to deal with
 defining a quasiquoter. My suggestion is only necessary if you want to
 *use* a quasiquoter.

 Michael




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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Antoine Latter
On Sat, Nov 27, 2010 at 8:38 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Hi Michael, you are absolutely correct, cabal did set the flags automatically.

 To sum up, here's what needs to be done:

 * add `flag ghc7` as a field in cabal
 * add:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

   in library field in cabal

 * add `{-# LANGUAGE CPP #-}` in source file
 * add

    #if GHC7
    x

    #else
    y

    #endif


  Hi Antonine, I don't know how to not set those fields in the
 constructor.. as a QQ noob, I'm just hacking on some legacy code. This
 code doesn't compile in GHC7, so I have to do this trick.

 * https://github.com/nfjinjing/mps/blob/master/src/MPS/TH.hs


Something like:

myQuoter = QuasiQuoter {
  quoteExp = expQuoter,
  quotePat = patQuoter
  }

Will work in either version, but it will leave the un-set fields set
to `undefined`, so you'll get a compile error if you try to use them.

I haven't tested this, but I've done it with other record types.

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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Jinjing Wang
Hi Antoine, Thanks for pointing out, it did work.

By using a record style constructor, the code can be made to support
both version, something like

here = QuasiQuoter
  {
quoteExp = (litE . stringL)
  , quotePat = (litP . stringL)
  }

in GHC7 there's a warning:

   Warning: Fields of `QuasiQuoter' not initialised: quoteType, quoteDec

So far it works without problem.


On Sun, Nov 28, 2010 at 10:38 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Hi Michael, you are absolutely correct, cabal did set the flags automatically.

 To sum up, here's what needs to be done:

 * add `flag ghc7` as a field in cabal
 * add:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

   in library field in cabal

 * add `{-# LANGUAGE CPP #-}` in source file
 * add

    #if GHC7
    x

    #else
    y

    #endif


  Hi Antonine, I don't know how to not set those fields in the
 constructor.. as a QQ noob, I'm just hacking on some legacy code. This
 code doesn't compile in GHC7, so I have to do this trick.

 * https://github.com/nfjinjing/mps/blob/master/src/MPS/TH.hs

 Best,

 On Sun, Nov 28, 2010 at 3:48 AM, Michael Snoyman mich...@snoyman.com wrote:
 On Sat, Nov 27, 2010 at 9:41 PM, Antoine Latter aslat...@gmail.com wrote:
 On Sat, Nov 27, 2010 at 10:59 AM, Jinjing Wang nfjinj...@gmail.com wrote:
 Dear list,

 From ghc 7.0.1 release notes:

 The Language.Haskell.TH.Quote.QuasiQuoter type has two new fields: 
 quoteType and quoteDec.

 Some of my code needs to be conditionally compiled to support both
 version 6 and 7, what is the recommended way to do it?

 ref:

 * 
 http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/release-7-0-1.html

 Can you just not set those fields? Then the code should work as-is for
 both versions. You'll get warnings for GHC 7, I think.

 Sorry Jinjing, I didn't read your original email carefully enough.
 Antoine is absolutely correct, this is the better way to deal with
 defining a quasiquoter. My suggestion is only necessary if you want to
 *use* a quasiquoter.

 Michael




 --
 jinjing




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


Re: [Haskell-cafe] Conditional compilation for different versions of GHC?

2010-11-27 Thread Jinjing Wang
Thanks for explaining, it's a nice trick.

On Sun, Nov 28, 2010 at 11:16 AM, Antoine Latter aslat...@gmail.com wrote:
 On Sat, Nov 27, 2010 at 8:38 PM, Jinjing Wang nfjinj...@gmail.com wrote:
 Hi Michael, you are absolutely correct, cabal did set the flags 
 automatically.

 To sum up, here's what needs to be done:

 * add `flag ghc7` as a field in cabal
 * add:

    if flag(ghc7)
        build-depends:   base                      = 4.3        5
        cpp-options:     -DGHC7
    else
        build-depends:   base                      = 4          4.3

   in library field in cabal

 * add `{-# LANGUAGE CPP #-}` in source file
 * add

    #if GHC7
    x

    #else
    y

    #endif


  Hi Antonine, I don't know how to not set those fields in the
 constructor.. as a QQ noob, I'm just hacking on some legacy code. This
 code doesn't compile in GHC7, so I have to do this trick.

 * https://github.com/nfjinjing/mps/blob/master/src/MPS/TH.hs


 Something like:

 myQuoter = QuasiQuoter {
  quoteExp = expQuoter,
  quotePat = patQuoter
  }

 Will work in either version, but it will leave the un-set fields set
 to `undefined`, so you'll get a compile error if you try to use them.

 I haven't tested this, but I've done it with other record types.

 Take care,
 Antoine




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


RE: [Haskell-cafe] Conditional compilation

2009-03-28 Thread Sittampalam, Ganesh
Robin Green wrote:
 I am writing some code for citation support in gitit, and all the
 #ifdefs I'm using to do conditional compilation are a bit tiresome.
 
 Suppose you have the requirement that a certain feature of your
 software be disable-able at compile time, to avoid having to pull in
 certain dependencies (which may not be available on all platforms).
 Disabling a feature may entail removing certain fields from certain
 constructors (again, to avoid pulling in certain dependencies), and/or
 removing certain functions from certain modules. What is the best way
 to do this in Haskell?

I would parameterise over the functionality (i.e. use type parameters to
datatypes and HOF parameters to functions where appropriate), and
instantiate the types with () or some useful type as appropriate. Some
CPP would still be required but hopefully only at the top level.

Ganesh

=== 
 Please access the attached hyperlink for an important electronic 
communications disclaimer: 
 http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html 
 
=== 
 
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Conditional compilation

2009-03-27 Thread Sean Leather
Hi Robin,

On Fri, Mar 27, 2009 at 16:13, Robin Green wrote:

 Suppose you have the requirement that a certain feature of your
 software be disable-able at compile time, to avoid having to pull in
 certain dependencies (which may not be available on all platforms).
 Disabling a feature may entail removing certain fields from certain
 constructors (again, to avoid pulling in certain dependencies), and/or
 removing certain functions from certain modules. What is the best way to
 do this in Haskell?


I don't know, but...

This problem description suggests that perhaps insights from
 Aspect-Oriented Programming and/or Software Product Lines may be
 relevant. However, I haven't heard of much work that relates these
 concepts to Haskell. Maybe this would be a good topic for an
 enterprising student?


I would love to see Haskell SPLs developed with feature-oriented programming
concepts [1,2]. Only it would be much better if compositions were type-safe.

I don't want aspects as they are presented in AspectJ (i.e. dynamic,
hazardous). But everybody has their own definition of aspect these days.

Regards,
Sean

[1] http://en.wikipedia.org/wiki/Feature_Oriented_Programming
[2] http://www.cs.utexas.edu/users/schwartz/search.cgi
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Conditional compilation

2009-03-27 Thread Henning Thielemann


On Fri, 27 Mar 2009, Robin Green wrote:


I am writing some code for citation support in gitit, and all the
#ifdefs I'm using to do conditional compilation are a bit tiresome.


I live well without CPP in Haskell. When I need conditional compilation I 
create two directories with modules of the same names in it. Then I set 
Hs-Source-Dirs conditionally in Cabal.

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