Igor S
Igor S

Reputation: 638

block, following after 'let' is not finished. Statement required

First of all I want to point out that I could translate the error message in uncorrect way... What is this error about? How should I write my code?

    [EntryPoint]
    let Main (args:string[]) =
            let start = startServer (args.[0]) 
            Console.Read()

I do not understand what should I do to let compiler be happy. Is the following code snippet correct?

let rec handle =
       let handler = socket.Accept()   
       let rec recieveData =
           let bytesRec = handler.Receive(bytes)
           let data = Encoding.ASCII.GetString(bytes,0,bytesRec)
           Console.WriteLine( "Text received : {0}", data)
       Console.Read()
   0

Upvotes: 2

Views: 189

Answers (2)

Stephen Swensen
Stephen Swensen

Reputation: 22297

I can't tell what your code is supposed to do because it has outside dependencies, but at a minimum your problem is indentation: whitespace in F# is significant and in particular plays a significant role in determining lexical scope. So for starters you need to fix indentation, something like

[EntryPoint]
let Main (args:string[]) =
    let start = startServer (args.[0]) 
    Console.Read()

let rec handle =
   let handler = socket.Accept()   
   let rec recieveData =
       let bytesRec = handler.Receive(bytes)
       let data = Encoding.ASCII.GetString(bytes,0,bytesRec)
       Console.WriteLine( "Text received : {0}", data)
   Console.Read()
   0

Also, your employment of rec values appears unnecessary if not incorrect. And it's odd that you perform a bunch of work in the body of the handle let expression only to bind it to 0... do you mean handle or recieveData to be functions? If so maybe you intended something more like

let handle socket = //make handle a function with socket an explicit dependency
   let handler = socket.Accept()
   let bytesRec = handler.Receive(bytes)
   let data = Encoding.ASCII.GetString(bytes,0,bytesRec)
   Console.WriteLine( "Text received : {0}", data)
   Console.Read() |> ignore //probably you are using Read to wait for user interaction to continue, but just ignore the result (returning unit) instead of returning 0

Upvotes: 1

Ramon Snir
Ramon Snir

Reputation: 7560

[<EntryPoint>]
let Main (args : string[]) =
    let start = startServer args.[0]
    Console.Read()

Upvotes: 1

Related Questions