F# Application Entry Point
Posted
by MarkPearl
on Geeks with Blogs
See other posts from Geeks with Blogs
or by MarkPearl
Published on Sat, 15 May 2010 17:05:38 GMT
Indexed on
2010/05/15
16:14 UTC
Read the original article
Hit count: 235
Up to now I have been looking at F# for modular solutions, but have never considered writing an end to end application. Today I was wondering how one would even start to write an end to end application and realized that I didn’t even know where the entry point is for an F# application.
After browsing MSDN a bit I got a basic example of a F# application with an entry point
[<EntryPoint>] let main args = printfn "Arguments passed to function : %A" args // Return 0. This indicates success. 0
Pretty simple stuff… but what happens when you have a few modules in a program – so I created a F# project with two modules and a main module as illustrated in the image below…
When I try to compile my program I get a build error…
A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence, and can only be used when compiling to a .exe…
What does this mean? After some more reading I discovered that the Program.fs needs to be the last file in the F# application – the order of the files in a F# solution are important. How do I move a source file up or down? I tried dragging the Program.fs file below ModuleB.fs but it wouldn’t allow me to. Then I thought to right click on a source file and got the following menu.
Wala… to move the source file to the bottom of the solution you can select the “Move Up” or “Move Down” option.
Now that I got this right I decided to put some code in ModuleA & ModuleB and I have the start of a basic application structure.
ModuleA Code
namespace MyApp module ModuleA = let PrintModuleA = printf "hello a \n" ()
ModuleB Code
namespace MyApp module ModuleB = let PrintModuleB = printf "hello b \n" ()
Program Code
// Learn more about F# at http://fsharp.net #light namespace MyApp module Main = open System [<EntryPoint>] let main args = ModuleA.PrintModuleA let endofapp = Console.ReadKey() 0
© Geeks with Blogs or respective owner