играя в ghci
я получил следующее выражение: unlines . map (\(a,b) -> show a ++ " " ++ show b)
Почему изменение подписи после присвоения
Теперь, когда я проверить его с помощью :t
я получаю:
> :t unlines . map (\(a,b) -> show a ++ " " ++ show b)
unlines . map (\(a,b) -> show a ++ " " ++ show b)
:: (Show a, Show a1) => [(a, a1)] -> String
Так точно, как и ожидалось. Но теперь, если я стараюсь, чтобы назначить его на некоторое имя, я получаю более конкретную сигнатуру, чем оригинал:
> let f = unlines . map (\(a,b) -> show a ++ " " ++ show b)
> :t f
f :: [((),())] -> String
Почему это происходит?
См. Также: [1] (http://stackoverflow.com/questions/7055146), [2] (http://stackoverflow.com/questions/11439163), [3] (http: // stackoverflow. com/questions/9714697), [4] (http://stackoverflow.com/questions/8434808), [5] (http://stackoverflow.com/questions/7799345), [6] (http: // stackoverflow .com/questions/8262020), [7] (http://stackoverflow.com/questions/8655900), [8] (http://stackoverflow.com/questions/11003535). Я честно не знаю, какой из них (если есть), чтобы отметить это дубликат. –