Я запутался по поводу использования типов фантомных:Путаница фантомного типа?
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!?
Я ожидаю, что этот код НЕ скомпилировать, как phantomFunction
явно заявляет о своем ожидающем типе данных Phantom
из Numbers
.
Однако это скомпилировано? Что я делаю не так?
Может быть, вы хотите GADT вместо этого? – augustss