Я хочу иметь перегруженную функцию в Haskell.Устранение двусмысленностей для перегруженных функций
{-# LANGUAGE FlexibleInstances #-}
class Foo a where
foo :: a
instance Foo (String -> Int) where
foo = length
instance Foo String where
foo = "world"
Однако такая перегрузка очень плохо связана с неоднозначными типами. print $ foo "hello"
приведет к ошибке, а print $ length "hello"
работает нормально. Однако при условии, что мой список экземпляров исправлен, не должно быть технической причины, по которой Haskell не может понять, что единственным экземпляром foo :: String -> a
является foo :: String -> Int
. Могу ли я сделать Haskell для этой реализации?
Является ли это действительно то, что вы хотите сделать? Но на вопрос: нет, я не думаю, что это может быть сделано этим генералом. – Carsten
@Carsten, я мог бы жить с функциями 'fooLen' и' fooStr', но я думаю, что перегрузка намного удобнее. –
Проблема заключается в том, что, возможно, вы экспортируете свою функцию ('printFoo' или что-то еще), а затем, если кто-то ее использует и добавляет экземпляр' instance Foo (String -> Double) 'он будет в затруднении – Carsten