[project @ 1996-07-25 21:02:03 by partain]
[nofib.git] / real / HMMS / NativeIO.lhs
1         \begin{haskell}{NativeIO}
2
3 > module NativeIO( module Native,  module MaybeStateT, module NativeIO ) where
4
5 > import Native
6
7 > import MaybeStateT
8
9 \end{haskell}
10
11 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \section {Functions for Reading Data}
13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
15         The function \verb~readVectors~ reads as many lists of values
16 having length \verb~n~ as it can from the binary stream \verb~bs~.
17 When it can't read any more, it stops.  If there are left-over bytes,
18 an error is signaled and execution will stop. Since reading vector
19 signals is such a common task, we create a specialized version of
20 \verb~readVectors~ for this case.
21         \begin{haskell}{readVectors}
22
23 > {-# SPECIALIZE readVectors :: Int -> Bytes -> [[Float]] #-}
24
25 > readVectors :: (Native a) => Int -> Bytes -> [[a]]
26
27 > readVectors n bs =
28 >       case (listReadBytes n bs) of
29 >       Nothing         -> if null bs
30 >                          then []
31 >                          else error "there are left-over bytes!"
32 >       Just (x,bs')   -> x : readVectors n bs'
33
34 \end{haskell}
35