Есть бинарный файл, нужно выбирать из него 16-битные отсчёты с определённого места (nBg - номер отсчёта в файле) и количеством-nSm. Результат - список типа [Word16] (или [Int16]) размером nSm. Вот последовательность действий над одним отсчётом (2-4): 1 main = do ff <- decodeFile "Data.dat" :: IO [Word16] 2 let x1 = putWord16le (ff !! 10) 3 x2 = runPut x1 4 x3 = decode x2 :: Word16 5 printf "0x%x\n" x3 Здесь получаю 1 отсчёт. Нужно написать ф-цию, которая формирует список из этих отсчётов, описанный выше. Примерная типизация: getRecData :: IO a -> Integer -> Integer -> [a] getRecData x nBg nSm Здесь, x - значение возвращённое decodeFile (1 строка - ff, например) nBg - номер позиции первого 16-битного отсчёта; nSm - всего отсчётов; [a] - результат, список отсчётов. Использую a (IO a, [a]), т.к. может быть и Word8, Word16, Word32...