Export of names only for testing

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Baa
Reply | Threaded
Open this post in threaded view
|

Export of names only for testing

Baa
Hello, All!

What is the standard Haskell convenience about export of module names for
testing? As I understand, I should export all of them which looks like
abstraction leak, but without this I can't test them, right?

===
Best regards, Paul
_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: Export of names only for testing

David McBride
It is common to export an Foo.Internal module that has the internals of your library in it, with a doc at the top that this is meant for internal use.  It can be used both for testing and sometimes the user of your library can do something with it you didn't think of if he has access to the internals.

On Mon, Oct 2, 2017 at 5:28 AM, Baa <[hidden email]> wrote:
Hello, All!

What is the standard Haskell convenience about export of module names for
testing? As I understand, I should export all of them which looks like
abstraction leak, but without this I can't test them, right?

===
Best regards, Paul
_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Baa
Reply | Threaded
Open this post in threaded view
|

Re: Export of names only for testing

Baa
> It is common to export an Foo.Internal module that has the internals
> of your library in it, with a doc at the top that this is meant for
> internal use.  It can be used both for testing and sometimes the user
> of your library can do something with it you didn't think of if he
> has access to the internals.

Hm, but if I have 10 modules in src/ (m1.hs, ..., m10.hs) I must create,
for example 10 folders like src/m1/, ..., src/m10/ and their individual
M*.Internal module, right? So, `m1`, for example, becomes:

  src/
    m1/
      Internal.hs
      All.hs
?

And `All.hs` imports and re-exports module (or its part only)
`Internal.hs`? Something like this?


===
Best regards, Paul
_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: Export of names only for testing

David McBride

On Mon, Oct 2, 2017 at 6:49 AM, Baa <[hidden email]> wrote:
> It is common to export an Foo.Internal module that has the internals
> of your library in it, with a doc at the top that this is meant for
> internal use.  It can be used both for testing and sometimes the user
> of your library can do something with it you didn't think of if he
> has access to the internals.

Hm, but if I have 10 modules in src/ (m1.hs, ..., m10.hs) I must create,
for example 10 folders like src/m1/, ..., src/m10/ and their individual
M*.Internal module, right? So, `m1`, for example, becomes:

  src/
    m1/
      Internal.hs
      All.hs
?

And `All.hs` imports and re-exports module (or its part only)
`Internal.hs`? Something like this?


===
Best regards, Paul
_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Baa
Reply | Threaded
Open this post in threaded view
|

Re: Export of names only for testing

Baa
Thank you, David!

> All I can give are examples.  These have single Internal modules.
>
> https://hackage.haskell.org/package/text-1.2.2.2/docs/Data-Text-Internal.html
> https://hackage.haskell.org/package/aeson-1.2.2.0/docs/Data-Aeson-Internal.html
> https://hackage.haskell.org/package/pipes-4.3.5/docs/Pipes-Internal.html
> https://hackage.haskell.org/package/reflex-0.4.0/docs/Reflex-Spider-Internal.html
>
> whereas opaleye for example has an entire Internal hierarchy.
>
> https://hackage.haskell.org/package/opaleye-0.6.0.0
>
> On Mon, Oct 2, 2017 at 6:49 AM, Baa <[hidden email]> wrote:
>
> > > It is common to export an Foo.Internal module that has the
> > > internals of your library in it, with a doc at the top that this
> > > is meant for internal use.  It can be used both for testing and
> > > sometimes the user of your library can do something with it you
> > > didn't think of if he has access to the internals.  
> >
> > Hm, but if I have 10 modules in src/ (m1.hs, ..., m10.hs) I must
> > create, for example 10 folders like src/m1/, ..., src/m10/ and
> > their individual M*.Internal module, right? So, `m1`, for example,
> > becomes:
> >
> >   src/
> >     m1/
> >       Internal.hs
> >       All.hs
> > ?
> >
> > And `All.hs` imports and re-exports module (or its part only)
> > `Internal.hs`? Something like this?
> >
> >
> > ===
> > Best regards, Paul
> > _______________________________________________
> > Beginners mailing list
> > [hidden email]
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> >  

_______________________________________________
Beginners mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners