我google了很多,但仍然困惑于在Haskell中重载函数的最惯用的方法。给出:
foo :: Int -> String -> Double
foo :: String -> String -> Double
foo :: String -> Double
foo :: Char -> Integer-> Integer -> Integer -> String
(不确定我是否涵盖了所有可能的情况)你会如何使它成为惯用的(类型类?)
答案 0 :(得分:5)
从技术上讲,你可以这样做:
{-# LANGUAGE FlexibleInstances #-}
class Foo a where
foo :: a
instance Foo (Int -> String -> Double) where
foo = ...
instance Foo (String -> String -> Double) where
foo = ...
instance Foo (String -> Double) where
foo = ...
instance Foo (Char -> Integer -> Integer -> String) where
foo = ...
但是,我认为这通常是不好的方式,因为我相信这些函数具有随机属性,你只需要将它们组合在一起,然后将来很难理解foo
函数。