#5529: Newtypes with hidden constructors cannot be passed as FFI arguments
-----------------------------------+----------------------------------------
Reporter: mikhail.vorozhtsov | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.3
Keywords: | Testcase:
Blockedby: | Difficulty:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
-----------------------------------+----------------------------------------
Comment(by mikhail.vorozhtsov):
> This goes way beyond the original ticket, and I must admit I'm having
trouble following your arguments.
My point is that, given the current level of integration between GHC and C
compilers, exporting constructors does not make programmers more confident
in their FFI imports signatures.
> > My other (original) concern is that exporting a constructor does not
only reveal the representation of the type, but also, obviously, gives
third party non-FFI code a way to construct instances of the type. For
CTime it may be ok, but think about flag types, which are allowed to have
only limited number of bits set (or, even worse, only limited number of
combinations of set bits).
>
> But you want to give clients the ability to call arbitrary foreign
functions that return the type! Allowing them to construct instances in
Haskell is no worse than that.
I disagree. It's like saying that, since we provide a way to construct
instances via unsafeCoerce, we should just export everything. To me FFI is
like unsafeCoerce, you can break things with it, but it requires a certain
amount of ''conscious'' effort to do so. Then the programmer sees
unsafeCoerce or "foreign import", he naturally checks things twice. On the
other hand, constructing "incoherent" instance using the newtype
constructor is just way too easy.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5529#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs