[Haskell-beginners] Multiple parameters vs anonymous syntax

David McBride toad3k at gmail.com
Tue Oct 17 17:52:48 UTC 2017


It is because of NoMomomorphismRestriction

>let mTh4 = \x -> \y -> \z -> x * y * z
>:t mTh4
mTh4 :: Integer -> Integer -> Integer -> Integer
>:set -XNoMonomorphismRestriction
>let mTh4 = \x -> \y -> \z -> x * y * z
>:t mTh4
mTh4 :: Num a => a -> a -> a -> a

I'm not going into it too deeply, as it is somewhat involved and you can
read about it but I believe when a function "takes no arguments", it is
allowed to specialize polymorphic variables to defaults, and due to the Num
constraint it chooses Integer.

On Tue, Oct 17, 2017 at 1:28 PM, Wink Saville <wink at saville.com> wrote:

> I'm going through "Haskell Programming from first principles" and in
> section 7.3 Anonymous Functions there is an exercise on converting multiple
> parameters to anonymous functions, and it asks:
>
> 1. Which (two or more) of the following are equivalent?
>
> mTh1 x y z = x * y * z
> mTh2 x y = \z -> x * y * z
> mTh3 x = \y -> \z -> x * y * z
> mTh4 = \x -> \y -> \z -> x * y * z
>
> So I created a file, anon.hs (attached):
>
> module Anon where
>
> mTh1 x y z = x * y * z
> mTh2 x y = \z -> x * y * z
> mTh3 x = \y -> \z -> x * y * z
> mTh4 = \x -> \y -> \z -> x * y * z
>
> I load that into ghci and check the function types:
>
> $ ghci anon.hs
> GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
> [1 of 1] Compiling Anon             ( anon.hs, interpreted )
> Ok, 1 module loaded.
> *Anon> :t mTh1
> mTh1 :: Num a => a -> a -> a -> a
> *Anon> :t mTh2
> mTh2 :: Num a => a -> a -> a -> a
> *Anon> :t mTh3
> mTh3 :: Num a => a -> a -> a -> a
> *Anon> :t mTh4
> mTh4 :: Integer -> Integer -> Integer -> Integer
>
> Why is mTh4 different from the rest?
>
>
> On the flip side If I enter "mTh4 = \x -> \y -> \z -> x * y * z" directly
> in ghci command line then it has same type as the others:
>
> $ ghci
> GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
> Prelude> mTh4 = \x -> \y -> \z -> x * y * z
> Prelude> :t mTh4
> mTh4 :: Num a => a -> a -> a -> a
>
>
> -- Wink
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20171017/6c4f7b20/attachment.html>


More information about the Beginners mailing list