私はファントムタイプを使用するより混乱している:ファントムタイプの混乱?
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
が明示的にその期待データ型Numbers
のPhantom
を述べたように、このコードませは、コンパイルすることを期待。
これはうまくコンパイルされますか?私は間違って何をしていますか?
たぶんあなたの代わりにGADTをしたいですか? – augustss