Следующие две функции очень похожи. Они читают из [String] n элементов, либо [Int], либо [Float]. Как я могу выделить общий код? Я не знаю ни одного механизма в Haskell, поддерживающего передачу типов в качестве аргументов.
readInts n stream = foldl next ([], stream) [1..n]
where
next (lst, x:xs) _ = (lst ++ [v], xs)
where
v = read x :: Int
readFloats n stream = foldl next ([], stream) [1..n]
where
next (lst, x:xs) _ = (lst ++ [v], xs)
where
v = read x :: Float
Я владею Haskell на начальном уровне, поэтому приветствуются любые комментарии к моему коду.