DoAndIfThenElse

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

DoAndIfThenElse

Harendra Kumar
Hi,

I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?

thanks,
harendra

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: DoAndIfThenElse

Brandon Allbery
Huh. I wonder if a section went missing; seems like none of the extensions that alter or relax layout are documented currently. (AlternativeLayoutRule, AlternativeLayoutRuleTransitional, DoAndIfThenElse, NondecreasingIndentation, RelaxedLayout)

IIRC DoAndIfThenElse relaxes a condition implied by layout but that normally only matters in "do": that if you break it into multiple lines, the "then" and "else" must be indented farther than the "if" or layout will consider them distinct new expressions (and thereby syntax errors).

On Thu, Feb 8, 2018 at 9:24 PM, Harendra Kumar <[hidden email]> wrote:
Hi,

I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?

thanks,
harendra

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: DoAndIfThenElse

Moritz Angermann
In reply to this post by Harendra Kumar
Hi,

not sure if this helps.

testsuite/tests/parser/should_compile/DoAndIfThenElse.hs gives us
```
{-# LANGUAGE DoAndIfThenElse #-}

module DoAndIfThenElse where

foo :: IO ()
foo = do if True
         then return ()
         else return ()
```

and there is some other mention in
libraries/bytestring/bench/wiki-haskell.html, which states:
```
<p>Haskell 2010 adds the <a href="/wiki/Foreign_function_interface" title="Foreign function interface">foreign function interface</a> (FFI) to Haskell, allowing for bindings to other programming languages, fixes some <a href="/wiki/Syntax_(programming_languages)" title="Syntax (programming languages)">syntax</a> issues (changes in the formal grammar) and bans so-called "n-plus-k-patterns", that is, definitions of the form <code>fact (n+1) = (n+1) * fact n</code> are no longer allowed. It introduces the Language-Pragma-Syntax-Extension which allows for designating a Haskell source as Haskell 2010 or requiring certain extensions to the Haskell language. The names of the extensions introduced in Haskell 2010 are DoAndIfThenElse, HierarchicalModules, EmptyDataDeclarations, FixityResolution, ForeignFunctionInterface, LineCommentSyntax, PatternGuards, RelaxedDependencyAnalysis, LanguagePragma and NoNPlusKPatterns.<sup id="cite_ref-2010ann_1-2" class="reference"><a href="#cite_note-2010ann-1"><span>[</span>1<span>]</span></a></sup></p>
```

in compiler/main/DynFlags.hs we find
```
languageExtensions (Just Haskell2010)
    = [LangExt.ImplicitPrelude,
       LangExt.MonomorphismRestriction,
       LangExt.DatatypeContexts,
       LangExt.TraditionalRecordSyntax,
       LangExt.EmptyDataDecls,
       LangExt.ForeignFunctionInterface,
       LangExt.PatternGuards,
       LangExt.DoAndIfThenElse,
       LangExt.RelaxedPolyRec]
```

So, in Haskell2010, it's always on, and allows to write the above code. When we set
NoDoAndIfThenElse, we get
```
    Unexpected semi-colons in conditional:
        if True; then return (); else return ()
    Perhaps you meant to use DoAndIfThenElse?
```

And then there's https://prime.haskell.org/wiki/DoAndIfThenElse.


Cheers,
 Moritz

> On Feb 9, 2018, at 10:24 AM, Harendra Kumar <[hidden email]> wrote:
>
> Hi,
>
> I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?
>
> thanks,
> harendra
> _______________________________________________
> ghc-devs mailing list
> [hidden email]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: DoAndIfThenElse

Harendra Kumar
In reply to this post by Brandon Allbery
Since I started programming in Haskell a few years ago I have been using if-then-else in that manner without indentation and I never knew about this extension. I thought this is how it works. It seems this is the default now. But, I remember encountering an error in an older compiler version once and then I figured the my style was accepted in newer compiler versions only.

-harendra

On 9 February 2018 at 08:08, Brandon Allbery <[hidden email]> wrote:
Huh. I wonder if a section went missing; seems like none of the extensions that alter or relax layout are documented currently. (AlternativeLayoutRule, AlternativeLayoutRuleTransitional, DoAndIfThenElse, NondecreasingIndentation, RelaxedLayout)

IIRC DoAndIfThenElse relaxes a condition implied by layout but that normally only matters in "do": that if you break it into multiple lines, the "then" and "else" must be indented farther than the "if" or layout will consider them distinct new expressions (and thereby syntax errors).

On Thu, Feb 8, 2018 at 9:24 PM, Harendra Kumar <[hidden email]> wrote:
Hi,

I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?

thanks,
harendra

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs




--
brandon s allbery kf8nh                               sine nomine associates
[hidden email]                                  [hidden email]
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net


_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

RE: DoAndIfThenElse

GHC - devs mailing list

At very least the extension should be documented! Would you like to open a ticket for that?  And even offer a patch?

 

Thanks for pointing this out.

 

Simon

 

From: ghc-devs [mailto:[hidden email]] On Behalf Of Harendra Kumar
Sent: 09 February 2018 02:43
To: Brandon Allbery <[hidden email]>
Cc: [hidden email] Devs <[hidden email]>
Subject: Re: DoAndIfThenElse

 

Since I started programming in Haskell a few years ago I have been using if-then-else in that manner without indentation and I never knew about this extension. I thought this is how it works. It seems this is the default now. But, I remember encountering an error in an older compiler version once and then I figured the my style was accepted in newer compiler versions only.

 

-harendra

 

On 9 February 2018 at 08:08, Brandon Allbery <[hidden email]> wrote:

Huh. I wonder if a section went missing; seems like none of the extensions that alter or relax layout are documented currently. (AlternativeLayoutRule, AlternativeLayoutRuleTransitional, DoAndIfThenElse, NondecreasingIndentation, RelaxedLayout)

 

IIRC DoAndIfThenElse relaxes a condition implied by layout but that normally only matters in "do": that if you break it into multiple lines, the "then" and "else" must be indented farther than the "if" or layout will consider them distinct new expressions (and thereby syntax errors).

 

On Thu, Feb 8, 2018 at 9:24 PM, Harendra Kumar <[hidden email]> wrote:

Hi,

 

I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?

 

thanks,

harendra

 

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



 

--

brandon s allbery kf8nh                               sine nomine associates

[hidden email]                                  [hidden email]

unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

 


_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

RE: DoAndIfThenElse

GHC - devs mailing list
In reply to this post by Harendra Kumar

I also recall that Idris and Elm have some do-syntax like this:

 

do { x <- e1

     ; Just y <-  e2

          | Nothing -> exceptional-code

     ; etc

     ; etc }

 

That is, e2 :: blah -> IO (Maybe t),  we can pattern match on the expected Just case, but still provide code for the Nothing case.  That’s much better than

 

do { x <- e1

     ; mb_y <- e2

     ; case mb_y of

         Nothing -> exceptional-code

         Just y ->  do { etc etc }

    }

 

I’d love this for Haskell, if someone felt like making a proposal. I do this kind of thing all the time!

 

Simon

 

 

 

From: ghc-devs [mailto:[hidden email]] On Behalf Of Harendra Kumar
Sent: 09 February 2018 02:43
To: Brandon Allbery <[hidden email]>
Cc: [hidden email] Devs <[hidden email]>
Subject: Re: DoAndIfThenElse

 

Since I started programming in Haskell a few years ago I have been using if-then-else in that manner without indentation and I never knew about this extension. I thought this is how it works. It seems this is the default now. But, I remember encountering an error in an older compiler version once and then I figured the my style was accepted in newer compiler versions only.

 

-harendra

 

On 9 February 2018 at 08:08, Brandon Allbery <[hidden email]> wrote:

Huh. I wonder if a section went missing; seems like none of the extensions that alter or relax layout are documented currently. (AlternativeLayoutRule, AlternativeLayoutRuleTransitional, DoAndIfThenElse, NondecreasingIndentation, RelaxedLayout)

 

IIRC DoAndIfThenElse relaxes a condition implied by layout but that normally only matters in "do": that if you break it into multiple lines, the "then" and "else" must be indented farther than the "if" or layout will consider them distinct new expressions (and thereby syntax errors).

 

On Thu, Feb 8, 2018 at 9:24 PM, Harendra Kumar <[hidden email]> wrote:

Hi,

 

I recently found a mention of DoAndIfThenElse extension somewhere. I looked inside the ghc user guide and could not find any such extension. Then I looked in the ghc man page, no mention. I googled and found a very sparse references to it here and there. Then I tried using the extension with ghc and ghc seems to accept it. What's the story behind this, why is it not documented but accepted?

 

thanks,

harendra

 

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



 

--

brandon s allbery kf8nh                               sine nomine associates

[hidden email]                                  [hidden email]

unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

 


_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs