Передавать типы в качестве аргументов функции в Haskell?

Следующие две функции очень похожи. Они читают из [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 на начальном уровне, поэтому приветствуются любые комментарии к моему коду.

8
задан augustss 6 April 2012 в 11:27
поделиться