module Main import CFFI string_from_c : Ptr -> IO String string_from_c str = foreign FFI_C "make_string_2" (Ptr -> IO String) str connection_information_struct : Composite connection_information_struct = STRUCT [I8, PTR, PTR, PTR, I32] send_page : (conn : Ptr) -> (text : String) -> (code : Int) -> IO Int send_page conn page code = pure (the Int 1) -- Error here was using the error from the 'do' block without 'Delay' applied, -- which ended up looking very strange... elaborator should take the first -- error (from the delayed block) when elaborating arguments which may or may -- not need a delay answer_to_connection : Ptr -> Ptr -> IO Int answer_to_connection conn conn_info = do code_fld <- pure $ (connection_information_struct#4) conn_info code <- peek I32 code_fld answer_fld <- pure $ (connection_information_struct#1) conn_info answer <- peek PTR answer_fld if answer /= null then do str <- string_from_c answer send_page conn str code -- (prim__zextB32_Int code) else do send_page conn str (prim__zextB32_Int code)