[Agda] readFile and output

Serge D. Mechveliani mechvel at botik.ru
Tue Oct 2 12:07:07 CEST 2012


People,
I have a beginner question on  IO  in the  Standard Libarary lib-0.6
(for Agda-2.3.0.1, MAlonzo).

The below small program intends to
(1) read a string  str  (like "1011")  from the file "inp.txt",
(2) convert  str  to  b : Bin,
(3) show b  to  bStr : String  and print  bStr  to the screen.

I know how to arrange (2) and (3).
But I need to find how to arrange the following operations related to 
(1).

a) What to write in the below program instead of the `do' sequence
   construct? 
   I recall that in  Haskell,  it is somewhat like
   do  
     str <- readFile "inp.txt"
     let (a, _) = readS coStr :: ...   -- reading from String
     putStr (show a) 

b) coStr <- readFile "inp.txt"     -- (what to write instead of `<-')
produces  coStr : Costring = Colist Char.
And it is difficult to find out  what is Colist.
But I hope that converting by  toList coStr  produces a reasonable
character list  chars : List Character.
Right?

c) About reading a natural. Having a string like  "103" : String,  
   what is the simplest way to convert it to  Nat  (unary natural) ?
For I observe that for  n : Nat,  the compiler converts  `n = 103'  
to the needed number.

Thank you in advance for explanation,

------
Sergei


---------------------------------------------------------------
open import Foreign.Haskell
open import IO.Primitive
...
open import Prelude using ( toCostring )  -- by F. Kettelhoit 

                                    -- readFile : String Б├▓ IO Costring
main : IO Unit
main = do                               -- help needed with `do'
         coStr : Colist Char
         coStr <- readFile "inp.txt"    -- ? help needed

         chars : List Char          
         chars = String.toList coStr    -- ? help needed
         str : String
         str = fromList chars

         digs : List Bit
         digs = stringToBits str        -- I can find this
         b : Bin                        --
         b = fromBits digs              --
         bStr = showBin b               --

         putStrLn (toCostring bStr)
-----------------------------------------------------------------



More information about the Agda mailing list