<div dir="ltr"><span style="font-size:13px">Projects written in an imperative style are the ones where type synonyms can really help. For example, some gtk functions have horrible type declarations, like</span><div style="font-size:13px"><br></div><div style="font-size:13px"><div>adjustmentNew :: Double -> Double -> Double -> Double -> Double -> Double -> IO Adjustment</div><div><br></div><div>Gtk was designed for an imperative setting, and as such should provide type synonyms to make users more comfortable.</div><div>In a purely functional style type synonyms are not as necessary. Most functions are self-descriptive, e.g. a function operating on age would make it obvious that it's operating on age, like,</div><div><br></div><div>incrementAge :: Int -> Int</div><div><br></div><div>You can argue that this declaration is more informative, as it doesn't hide the details of 'Age' but yet doesn't confuse the reader.</div></div><div class="gmail_extra" style="font-size:13px"><br></div><div class="gmail_extra" style="font-size:13px">As for help provided by the editor, I use emacs-haskell-mode, and it provides interactions with an inferior ghc process. It allows you to query the type and then see the result at the bottom of the window.</div><div class="" style="font-size:13px"></div><div class="gmail_extra"><br><div class="gmail_quote">On 18 January 2015 at 01:37, Mathieu Boespflug <span dir="ltr"><<a href="mailto:mboes@tweag.net" target="_blank">mboes@tweag.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I tend to reserve type synonyms exclusively for *abbreviating* types,<br>
for example when they end up being long and unwieldy. Since this is<br>
seldom necessary, I seldom use type synonyms. Others (ab?)use type<br>
synonyms to convey semantic information, e.g.<br>
<br>
type Age = Int<br>
<br>
However, if the need for naming things separately at the type level<br>
really is pressing, then one could argue that for that you would be<br>
better served introducing a newtype anyways.<br>
<br>
IOW, my rule of thumb is: type synonyms only as abbreviations,<br>
newtypes for semantically distinct entities, neither when the overhead<br>
of a newtype wouldn't pay its own way in terms of either static<br>
checking or clarity.<br>
<br>
Best,<br>
<br>
Mathieu<br>
<div class="HOEnZb"><div class="h5"><br>
On 17 January 2015 at 20:06, Julian Ospald <<a href="mailto:hasufell@posteo.de">hasufell@posteo.de</a>> wrote:<br>
> Hi,<br>
><br>
> I've recently had a discussion about type synonyms and when to use them<br>
> in haskell.<br>
><br>
> On the one hand, they make reading type signatures easier and tell you<br>
> what is meant, not just what is inside. On the other hand they also sort<br>
> of hide what is inside, although you will probably need to know exactly<br>
> that when using them. This might make reading code for new collaborators<br>
> more difficult if they have to memorize all type synonyms first.<br>
><br>
> So there are basically a few questions:<br>
> * What do you think is a good policy for when and how to use them? Or<br>
> would you say just not use them at all and put equivalent information in<br>
> parameter documentation?<br>
> * What are the upsides, downsides, pitfalls and also alternatives? (for<br>
> completeness, also since<br>
> <a href="https://www.haskell.org/haskellwiki/Type_synonym" target="_blank">https://www.haskell.org/haskellwiki/Type_synonym</a> is a bit sparse)<br>
> * Can we do something to improve the downsides? Or is there already<br>
> something? (e.g. editor/IDE that can tell me the underlying type, error<br>
> messages etc.)<br>
><br>
><br>
> --<br>
> Regards,<br>
> Julian Ospald<br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
> <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div>Regards</div><div dir="ltr"><div><br></div><div>Sumit Sahrawat</div></div></div></div></div></div></div>
</div></div>