Skip to content

Instantly share code, notes, and snippets.

@SchlenkR
Created November 30, 2021 20:38
Show Gist options
  • Save SchlenkR/c507a20967e7d6b55ccb7eb3ca6604f6 to your computer and use it in GitHub Desktop.
Save SchlenkR/c507a20967e7d6b55ccb7eb3ca6604f6 to your computer and use it in GitHub Desktop.
F# Markdown für Vadim

Kochen mit Ronald

Super einfache Rezepte

Spaghetticode

var x = 10
var y = 20
var z = x + y

Hello, this is Vadim.

My skills are:

  • This
  • That
  • Whatever
(*
- Header (n-stufig)
- Codeblöcke
- Textblöcke
- Listen
*)
(*
<markdown>
<h1>Kochen mit Ronald</h1>
<h2>Super einfache Rezepte</h2>
<bullet>
<item>This</item>
<item>...</item>
</bullet>
<code lang="csharp">
var x = 10
var y = 20
var z = x + y
</code>
</markdown>
*)
// 2 Wege (gibt prinzipiell noch mehr)
// 1. Datenmodell definieren; Funktionen auf Daten, die "rendern"
// 2. Funktionen definieren, die direkt rendern
// ------
// Weg 2
// ------
// Wir habe Textzeiln.
// Jede Funktion nimmt irgendetwas entgegen und evaluiert zu einer Liste von strings.
// Diese Strings werden zum Schluss zusammengesetzt ("eine Liste von Funktionen") und ergeben das finale Dokument.
(*
let document =
h1 "Kochen mit Ronald"
h2 "Super einfache Rezepte"
bullet
"This"
"that"
"Hello, this is Vadim."
"My skills are:"
code lang="csharp"
"""
var x = 10
var y = 20
var z = x + y
"""
render document
*)
// let h1 (text: string) = $"{text}\n==="
let h1 (text: string) =
[
yield text
yield "==="
yield ""
]
let h2 (text: string) =
[
yield text
yield "---"
yield ""
]
let hn level (text: string) =
[
yield (String.replicate level "#") + $" {text}"
]
let bullet (items: list<string>) =
[
for x in items do
$"* {x}"
""
]
// items |> List.map (fun x -> $"* {x}")
let code lang text =
[
$"``` %s{lang}"
text
"```"
""
]
let text = List.singleton
// List.singleton "sdfsdf"
// text "sdfsdf"
let document = [
h1 "Kochen mit Ronald"
h2 "Super einfache Rezepte"
bullet [
"This"
"that"
]
text """
Hello, this is Vadim.
My skills are:
"""
code "csharp" """
var x = 10
var y = 20
var z = x + y
"""
]
let render document =
// document
// .SelectMany(id)
// .Select(fun line -> line + "\n")
// .Aggregate(fun a b -> a + b)
document
|> List.collect id
|> List.map (fun line -> line + "\n")
|> List.fold (+) ""
// TODO: Alternative mit yield!
let finalDoc = render document
// -------------------
// Off-Topic / Exkurs:
// -------------------
let getAllNames (friends: list<string>) =
[
yield "Vadim"
// for friend in friends do
// yield friend
yield! friends
yield "Ronald"
yield "Jana"
]
getAllNames [ "Hans"; "Peter"; "Erika" ]
// seq {
// yield "Hallo"
// yield "Vadim"
// }
// [|
// yield "Hallo"
// yield "Vadim"
// |]
// [|
// for i in 1..10 do
// yield i + 100
// |]
// public IEnumerable<string> GetStrings() {
// yield return "Hallo";
// yield return "Vadim";
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment