惯用函数重载

时间:2017-01-06 10:11:48

标签: haskell

我google了很多,但仍然困惑于在Haskell中重载函数的最惯用的方法。给出:

foo :: Int -> String -> Double
foo :: String -> String -> Double
foo :: String -> Double
foo :: Char -> Integer-> Integer -> Integer -> String

(不确定我是否涵盖了所有可能的情况)你会如何使它成为惯用的(类型类?)

1 个答案:

答案 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函数。