Jump to content

Talk:Haskell/Modules

Page contents not supported in other languages.
Add topic
From Wikibooks, open books for an open world
Latest comment: 2 years ago by VernonF in topic Qualified imports

encapsulation

[edit source]

there should be something on how not exporting a constructor can hide information. if no expert takes on the job within the next few days, I am happy to do it.

Agree; I will add something along these lines later. Duplode (discusscontribs) 05:17, 29 September 2013 (UTC)Reply

Needs some clarification

[edit source]

I'm learning from this wikibook, so I can't make the changes myself.. there ought to be a real example of a module definition, not just the syntax. I'm not quite clear on how 'where' works (at first I thought it was a syntactical marker) after reading this. --207.14.29.3 23:22, 19 July 2007 (UTC)Reply

I agree. there should be one toy module completely defined. I'm doing it.
Arguably solved in an indirect way by making Haskell/Standalone programs the very next module. Duplode (discusscontribs) 05:18, 29 September 2013 (UTC)Reply

How to express Main.(++++)?

[edit source]

I define a infix function (++++) in module Main.

Sorry, could you elaborate on your question? If you want to import/export infix functions, you have to wrap them around parentheses, like import Foo.Bar ( foo, (++++), etc ). Were you talking about that? -- Kowey 07:05, 2 August 2007 (UTC)Reply

for example:

module Main where
(+)::[a]->[a]->[a]
a + b = a++b
main = do
    print ([1] + [2])
    return ()

It says "Ambiguous",because + is also define in Prelude.

How to explicitly point it's Main.+?

Infix operators can be qualified
  Hugs> 1 Prelude.+ 2
  3
  Hugs> (Prelude.+) 1 2
  3

Note that you may have to hide the original (+) and import the Prelude qualified in order to redefine (+) in terms of the old one:

  module Main( (+) ) where

  import Prelude hiding ( (+) )
  import Prelude qualified

  (+) :: Num a => [a]->[a]->[a]
  a + b = zipWith (Prelude.+) a b

-- apfeλmus 09:42, 3 August 2007 (UTC)Reply

The $ operator

[edit source]

Some examples in this section use the $ operator, which has not been introduced yet. It is a bit confusing, and I still don't quite get what it does. Could someone add little more detail on that, please?

The $ operator is just ordinary function application f $ x = f x. It has very low precedence, however, which is very useful to saving parentheses. Example:
     length (map (^2) [1..10])
   = length $ map (^2) [1..10]
   = length $ map (^2) $ [1..10]
--apfeλmus 07:25, 28 March 2011 (UTC)Reply
To add to that, it can also be useful in other situations where it can remove a lambda expression: callWith0 = ($ 0). We should include information on this operator before this module outside of the talk page, though. --Digichoron (discusscontribs) 01:05, 6 April 2011 (UTC)Reply

Qualified imports

[edit source]

I've read over this section several times and can not determine what the difference is between a 'qualified import' and a simple 'import'? VernonF (discusscontribs) 19:37, 26 September 2021 (UTC)Reply