take :: Int -> [a] -> [a]
genericTake :: Integral i => i -> [a] -> [a]
Я читал, что неудобный тип take
объясняется историческими причинами, и это изменение может привести к разрыву кода.Почему нельзя использовать тип принятия, чтобы использовать какой-либо интеграл?
Но я не могу заменить take
на genericTake
везде, не нарушая ничего? В чем проблема?
Я предполагаю, что может возникнуть ситуация, когда вывод типа основан на 'take' type - с' genericTake' что-то типа «не может выводиться» будет происходить. – leventov
Обратите внимание, что в дополнение к (и, возможно, более существенному, чем) поломке кода в неясных случаях замена 'take' на' genericTake' приведет к ухудшению производительности во многих случаях (так как тип defaulting теперь приведет к 'Integer', используется, когда не указывается ':: Int'). – sepp2k