我试图理解 haskell 中的多态性。给出下面的典型示例
module Main where
data Dog = Dog
data Cat = Cat
class Animal a where
speak :: a -> String
getA :: a
instance Animal Dog where
speak _ = "Woof"
getA = Dog
instance Animal Cat where
speak _ = "Meow"
getA = Cat
doA animal = do
putStrLn $ speak animal
main :: IO ()
main = do
doA Dog
doA Cat
doA (getA :: Dog)
Run Code Online (Sandbox Code Playgroud)
我的getA
函数是Animal
类型类的一部分,并且它按预期工作。getA
只要我提供类似的类型注释我就可以使用read
。 …