Список в Haskell может хранить значения только одного типа, поэтому вы не можете делать забавные вещи, такие как (apply substring ["Foo",2,3])
.Haskell также не имеет функций с переменным числом, поэтому (+)
может принимать только два аргумента.
В Haskell есть функция $:
($) :: (a -> b) -> a -> b
f $ x = f x
Но это действительно очень полезно, посколькунизкий приоритет, или как проходящий через HOF.
Я полагаю, вы могли бы сделать что-то подобное, используя типы кортежей и fundeps, хотя?
class Apply f tt vt | f -> tt, f -> vt where
apply :: f -> tt -> vt
instance Apply (a -> r) a r where
apply f t = f t
instance Apply (a1 -> a2 -> r) (a1,a2) r where
apply f (t1,t2) = f t1 t2
instance Apply (a1 -> a2 -> a3 -> r) (a1,a2,a3) r where
apply f (t1,t2,t3) = f t1 t2 t3
Я думаю, что это своего рода', не так ли?
Редактировать : это на самом деле не компилируется;заменено ответом @ FUZxxl.