Czy w Haskellu można mieć dwie funkcje o tej samej nazwie - jedną w klasie a drugą globalną?
Czy istnieje taka separacja jak w językach obiektowych?
Z poniższego kodu wnioskuję, że nie ma takiej separacji, mimo to my_show z instancji klasy MyShow
wydaje się należeć tylko do tej klasy.
data MyBool = MyTrue | MyFalse
instance Eq MyBool where
MyTrue == MyTrue = True
_ == _ = False
class MyShow a where
my_show :: a -> String
instance MyShow MyBool where
my_show MyTrue = "MyTrue"
my_show MyFalse = "MyFalse"
my_show :: MyBool -> String
my_show MyTrue = "fg MyTrue"
my_show MyFalse = "fg MyFalse"
main =
do
putStrLn $ s1 ++ " ==> " ++ (show v1)
putStrLn $ s2 ++ " ==> " ++ (show v2)
putStrLn $ s3 ++ " ==> " ++ (show v3)
where
s1 = "(" ++ my_show MyTrue ++ " == " ++ my_show MyTrue ++ ") "
s2 = "(" ++ my_show MyTrue ++ " == " ++ my_show MyFalse ++ ")"
s3 = "(" ++ my_show MyTrue ++ " /= " ++ my_show MyFalse ++ ")"
v1 = (MyTrue == MyTrue)
v2 = (MyTrue == MyFalse)
v3 = (MyTrue /= MyFalse)