Вариадики на хаскеле. (o_O)
От: Кодт Россия  
Дата: 25.05.17 17:48
Оценка:
Как сделать функцию настолько полиморфной, чтобы она принимала произвольное количество произвольных аргументов?
Понятно, что можно взять обобщённый список и подать его как единственный аргумент
{-# LANGUAGE ExistentialQuantification, GADTs #-}

data S = forall a . Show a => S a

join :: [S] -> String
join = (foldr (\x y -> x ++ ";" ++ y) "") . (map (\(S x) -> show x))

main = putStrLn $ join [S 1, S "2", S (), S ["hello","world"]]


Но Дэвид Блейн покажет нам настоящую, уличную магию и сделает карринг!
https://habrahabr.ru/post/324190/

Однако, IdeOne отказался компилировать первый же пример: http://ideone.com/DLTa60

Что скажете? Пребываю в недоумении...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.