frosch03.de/posts/2013-01-24-DataType

Blogeinträge

Ein Datentyp stellt die Essenz der darzustellenden Information dar. Der einfachste vorstellbare Datentyp für ein Blog ist lediglich die Menge sämtlicher Beiträge. Diese werden gespeichert und bei Bedarf dem Benutzer gezeigt.

Um ein Blogeintrag nicht nur aus blankem Text bestehen zu lassen, reicht ein string als Datentyp für den Blogeintrag nicht aus. Es wird hier ein Datentyp benötigt, der es ermöglicht, Wörter mit Formatinformationen zu versehen.

Neben dem Blogeintrag ist es sinnvoll, nicht nur den Beitrag zu speichern. Es ist nützlich, den Beitrag mit Metadaten zu verknüpfen. Darunter fallen z.B. Datum, Author oder Kategorien.

Das bedeutet, dass der Datentyp, der einen Blogeintrag abbildet, aus den Metadaten und dem Text des Blog's steht; in Haskell folgendermaßen ausgedrückt.

{% highlight haskell %} data BlogEntry = Entry [MetaData] BlogText deriving (Show) {% endhighlight %}

Metadaten

Im frogblog soll ein Blogpost an eine Mail erinnern, eine Mail an viele. Eine Mail besitzt einen Absender, einen oder mehrere Empfänger, das Subject und zusätzlich noch ein Datum.

Genau das spiegelt sim in den Metadaten des Blogposts wieder, denn dort kann ein Metadatum dabei

  • der Betreff des Artikels sein.
  • das Datum der Veröffentlichung des Artikels sein.
  • den Autor des Artikels benennen.
  • die Menge der Kategorien sein zu denen sich der Beitrag zuordnen lässt.

Das übersetzt in einen Haskelldatenyp würde folgendermaßen aussehen:

{% highlight haskell %} data MetaData = Subject String | Date String | To [String] | From String deriving (Show) {% endhighlight %}

Blogtext

Da ein Blogeintrag nicht nur aus Text bestehen soll, ist eine Möglichkeit Text zu formatieren notwendig; eine Beschreibungssprache muss her.

Ein weiteres Ziel für frogblog ist, Blogeinträge möglichst mit einfachen Mitteln erstellen zu können. Ein Blogeintrag sollte mit jedem Texteditor (vor allem mit vim) verfasst werden können. Zum Formatieren des Textes ist eine Beschreibungssprache ähnlich wie LaTeX ideal.

Der erste Ansatz um einen derartig formatierten Blogeintrag in Haskell abbilden zu können könnte wie folgt aussehen.