Je suis confus sur l'utilisation des types de fantômes:Phantom type confusion?
type Words = String
type Numbers = Int
data NonPhantom = NP1 Words | NP2 Numbers deriving (Show)
data Phantom a = P1 Words | P2 Numbers deriving (Show)
nonPhantomFunction :: NonPhantom -> Int
nonPhantomFunction r = 100
phantomFunction :: Phantom Numbers -> Int
phantomFunction a = 2001
main = do
print $ nonPhantomFunction (NP1 "sdsdds") --can also pass NP2 here!
print $ phantomFunction (P1 "sdsdsd") --This shouldn't work!?
Je me attends ce code PAS pour compiler, comme phantomFunction
indique explicitement son type de données attendant Phantom
de Numbers
.
Cependant, cela compile bien? Qu'est-ce que je fais mal?
Peut-être que vous voulez un GADT à la place? – augustss