3 Introduction to Brittle Fish
Craig edited this page 5 years ago

Before digging too far into the project, it is a good idea to know why it exists. On top of that, you should, also, know about its limitation. Without either of these two pieces of information, you will likely find frustration; Which is no use to anyone.

Why This Repository Exists

Before I made this repository, I made two NuGet packages. They are Console.Waterworks (C.W.) and Console.Waterworks.Core (C.W.C.). I wrote both of them in C# and, at the time, it was the only .Net language I knew. Because of this, I wrote these packages with complete disregard for F# and Visual Basic developers. That changed when I stumbled into learning F#. Unfortunately, this came after I had already published working versions of C.W. and C.W.C.

After I became competent enough with F#, it became my default .Net language. This meant I needed to see if I could use C.W. and C.W.C. in their current states.

If you are already familiar with .Net, you will know Microsoft focuses more on C# than F# or Visual Basic. Because of this, the documentation/resources for F# and V.B. are nowhere near as good as C#'s. This created a lot of frustration for me, whilst learning and using F#. I quite often needed to do the "C#-shuffle" when looking up a part of the .Net framework in an F# context.

After fiddling around with C.W. and C.W.C. in an F# environment, I managed to get them working. The amount of work required was very little, to my surprise; C.W. and C.W.C. hold-up pretty well. Because of that, I felt comfortable providing documentation for F# developers. One of my concerns with doing this was making sure the F# part did not feel tacked-on. Yes, I wrote C.W. and C.W.C. in C# but you do not need to use them in C#. This realisation is why I made this repository. As an F# developer, you might not be able to change the internals of C.W. and C.W.C but I can help you use them with F#.

If you are wondering why I did not include everything in this wiki in the C.W. wiki, the two main reasons are:

  1. I wanted to minimise the need to do the "C#-shuffle". You are an F# developer, why look at C#?
  2. I did not want the wikis to look and feel bloated/cluttered. I felt they would if I added an "F#-only" section. If you are a C# developer, the F# code will feel like it is in the way.

Limitations of the Repository

With this repository acting as a glorified tutorial, there are several limitations to it.

  1. The first and most obvious one is you do not have direct access to the C.W. and C.W.C. source code. On top of that, this repository does not document how to alter said source code. Instead, you are bound to what C.W. and C.W.C. gives you. This may or may not be enough for your needs.
  2. Another potential source of frustration is the mixing of languages. Because I wrote C.W. and C.W.C in C#, they do not maximise F#'s features and idioms. This means the F# use in this repository might be a little "off".
  3. There is a separation of repositories. There are three in total (C.W., C.W.C. and this one). This means you might need to jump around more places than usual, when it comes to references/learning a new code-base.

The Reason for no Visual Basic Repository

The simple answer is I do not know Visual Basic. If you do know Visual Basic and would like to provide something like this repository, feel free to do so.