<div dir="ltr"><div><div>You can use the Data.Typeable module<br><br>import Data.Typeable<br><br>:t typeOf True<br>typeOf True :: TypeRep<br><br>:t show (typeOf True)<br>show (typeOf True) :: String<br><br>typeOf 1 == typeOf 1<br>True<br><br>>typeOf 1 == typeOf True<br>False<br><br></div>But it works on concrete types, not functions.  Sorry.<br><br>let len = sum . map (const 1)<br>typeOf len<br><br><interactive>:17:1:<br>    No instance for (Typeable b0) arising from a use of ‘typeOf’<br>    In the expression: typeOf len<br>    In an equation for ‘it’: it = typeOf len<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 7, 2016 at 1:06 PM, Dániel Arató <span dir="ltr"><<a href="mailto:exitconsole@gmail.com" target="_blank">exitconsole@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">How does GHCi show types?<br>
<br>
Is there a magic function (showType :: a -> String) that does that? Or<br>
is this feature buried somewhere deep in the compiler?<br>
<br>
Can I show, compare and reason about types in a Haskell program?<br>
<br>
This would be cool:<br>
<br>
```haskell<br>
test = do<br>
let len = sum . map (const 1)<br>
when (isInfixOf "Integer" (showType len)) $ putStrLn "restrictive type<br>
inferred; maybe try turning off monomorphism restriction"<br>
```<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>