<div dir="ltr">Edward, <div><br></div><div>I had the exact same thought but I couldn't get it to work. Oddly enough, I actually copied and pasted that example from my code which builds and runs perfectly well. It seems that monad transformers work differently when defined as a type (instead of newtype, which would require me to include the type parameter)?</div><div><br></div><div>Somewhat related is the question of how to actually *export* this type alias from a module.</div><div><br></div><div>> module Money (($)) where</div><div>></div><div><div style="font-size:12.8px"><div>> type f $ x = f x</div><div>> infixr 0 $</div><div><br></div><div>doesn't work because it tries to export Prelude.$. The only way around it is to import Prelude hiding (($)). But this makes me wonder, is it actually *impossible* in Haskell to export from the same module a function with the same name at both the value and type level? Is it possible to export only one of the two?</div><div><br></div><div>Elliot</div><div><br></div></div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 2, 2016 at 10:42 AM, Oleg Grenrus <span dir="ltr"><<a href="mailto:oleg.grenrus@iki.fi" target="_blank">oleg.grenrus@iki.fi</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">To make it clear:<br>
<br>
type level `.` won’t work as an type synonym, as it’s application isn’t saturated.<br>
<br>
{-# LANGUAGE TypeOperators #-}<br>
type (:.:) f g x = f (g x)<br>
infixr 9 :.:<br>
<br>
type App = Maybe :.: []<br>
<br>
fails to compile with following errors (for a reason):<br>
<br>
    • The type synonym ‘:.:’ should have 3 arguments, but has been given 2<br>
    • In the type synonym declaration for ‘App’<br>
<div class="HOEnZb"><div class="h5"><br>
> On 02 Nov 2016, at 16:24, Edward Kmett <<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>> wrote:<br>
><br>
> +1, but the operator you're looking for in App there would actually be a type level version of (.).<br>
><br>
> type App a = ExceptT Err $ ReaderT Config $ LogT Text $ IO a<br>
><br>
> type App = ExceptT Err . ReaderT Config . LogT Text . IO<br>
><br>
> which would need<br>
><br>
> type (.) f g x = f (g x)<br>
> infixr 9 .<br>
><br>
> to parse<br>
><br>
> -Edward<br>
><br>
> On Tue, Nov 1, 2016 at 7:13 PM, Elliot Cameron <<a href="mailto:eacameron@gmail.com">eacameron@gmail.com</a>> wrote:<br>
> Folks,<br>
><br>
> Has there been a discussion about adding a type-level operator "$" that just mimics "$" at the value level?<br>
><br>
> type f $ x = f x<br>
> infixr 0 $<br>
><br>
> Things like monad transformer stacks would look more "stack-like" with this:<br>
><br>
> type App = ExceptT Err $ ReaderT Config $ LogT Text IO<br>
><br>
> Elliot Cameron<br>
><br>
> ______________________________<wbr>_________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/libraries</a><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/libraries</a><br>
<br>
</div></div></blockquote></div><br></div>