# Haskell Interlude 38: Edwin Brady

**URL:** <https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270>\
**Category:** Links\
**Created:** [December 4, 2023, 8:25am UTC](https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270 "2023-12-04T08:25:26Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![nomeata](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/nomeata/32/1188_2.png) [@nomeata](https://discourse.haskell.org/u/nomeata)\
**Post date:** [December 4, 2023, 8:25am UTC](https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270/1 "2023-12-04T08:25:26Z")

</div>

> **[Edwin Brady](https://haskell.foundation/podcast/38/)**
>
> Andres and Wouter interview Edwin Brady, most famous for his work on the
> Idris programming language. We talk about how he got interested in
> programming with dependent types, his thoughts on dependently typed
> programming in Haskell, and his vision for...

Andres and Wouter interview Edwin Brady, most famous for his work on the Idris programming language. We talk about how he got interested in programming with dependent types, his thoughts on dependently typed programming in Haskell, and his vision for Idris

---

<div class="post-metadata">

**Author:** ![jaror](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaror/32/3271_2.png) [@jaror](https://discourse.haskell.org/u/jaror)\
**Post date:** [December 6, 2023, 9:41pm UTC](https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270/2 "2023-12-06T21:41:21Z")

</div>

Let me repeat my [kbin comment](https://kbin.social/m/haskell/t/677250/Haskell-Interlude-38-Edwin-Brady#entry-comment-3983572) here for more reach:

I think [Idris’ bang notation](https://idris2.readthedocs.io/en/latest/tutorial/interfaces.html#notation) for performing effects in a do-block is pretty, it could look like this:

```haskell
main = do putStrLn ("You said: " ++ !getLine)

```

Today, you’d have to come up with a new variable name or figure out the right combinator names:

```haskell
main = do line <- getLine; putStrLn ("You said: " ++ line)

main = putStrLn . ("You said: " ++) =<< getLine

```

But unfortunately there are more complicated cases:

```haskell
main = do print (True || !getLine == "foo")

```

In a strict language with built-in short-circuiting logical operations the `getLine` would never be performed, but in Haskell `||` is just a normal function that happens to be lazy in its second argument. The only reasonable way to implement it seems to be to treat every function as if it was strict and always perform the `getLine`:

```haskell
main = do line <- getLine; print (True || line == "foo")

```

Do you think this is confusing? Or is the bang notation useful enough that you can live with these odd cases? I’m not very happy with this naive desugaring.

---

<div class="post-metadata">

**Author:** ![atravers](https://avatars.discourse-cdn.com/v4/letter/a/45deac/32.png) [@atravers](https://discourse.haskell.org/u/atravers)\
**Post date:** [December 6, 2023, 10:00pm UTC](https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270/3 "2023-12-06T22:00:54Z")

</div>

> [@Monadic Bang: A plugin for more concise do-block notation, inspired by Idris](http://discourse.haskell.org/t/monadic-bang-a-plugin-for-more-concise-do-block-notation-inspired-by-idris/5556):
>
> I’ve written a GHC plugin that lets you take things like the following code: main :: IO () main = do putStrLn "Which argument would you like to print?" line \<- getLine args \<- getArgs putStrLn $ args !! read line and instead write this code: main :: IO () main = do putStrLn "Which argument would you like to print?" putStrLn $ !getArgs !! read !getLine This is heavily inspired by Idris’s [!-notation](https://idris2.readthedocs.io/en/latest/tutorial/interfaces.html#notation), the main difference being that this plugin only allows you to use ! inside of existi…

---

<div class="post-metadata">

**Author:** ![jaror](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaror/32/3271_2.png) [@jaror](https://discourse.haskell.org/u/jaror)\
**Post date:** [December 6, 2023, 10:02pm UTC](https://discourse.haskell.org/t/haskell-interlude-38-edwin-brady/8270/4 "2023-12-06T22:02:12Z")

</div>

Thanks for reminding me of that…
