uebung2017_3/src/Aufgabe2.md
2017-05-08 11:16:38 +02:00

2.1 KiB

Aufgabe 2

module Aufgabe2 where

In der Vorlesung haben sie bereits einige Monaden kennengelernt. In dieser Aufgabe sollen Sie das gelernte im praktischen Einsatz kennen lernen.

Bei dieser Aufgabe geht es um das Arbeiten mit einem 'Blog-System', in dem User, Posts und Comments gespeichert sind. All dies ist bereits vorgegeben im Modul BlogSys. Für Sie relevant werden maximal folgende Informationen zu diesem System sein:

type Title = String type Content = String

getUser :: Int -> Maybe User

getPosts :: User -> [Post] getPostTitle :: Post -> Maybe Title getPostContent :: Post -> Content getComments :: Post -> [Comment] getCommentTitle :: Comment -> Maybe Title getCommentContent :: Comment -> Content

import BlogSys

Schreiben Sie nun die neue Funktion headMay, welche /eigentlich/ in der Prelude sein sollte.

headMay :: [a] -> Maybe a

headMay = undefined

Schreiben Sie nun eine Funktion, die den ersten Buchstaben des Titels des Kommentares des ersten Posts des Users mit der gegebenen ID zurückgibt, falls dieser existiert

getFirstLetterOfFirstCommentForFirstPostOfUserWithId = gflofcffpouwi gflofcffpouwi :: Int -> Maybe Char gflofcffpouwi = undefined

Wenn man sich nun nicht immer nur den ersten Eintrag zurückgeben lassen möchte, empfiehlt es sich, eine Funktion atMay zu definieren.

atMay :: [a] -> Int -> Maybe a

atMay = undefined

Schreiben Sie nun die Funktionen getNthPost und getNthComment.

getNthPost :: Int -> User -> Maybe Post

getNthPost = undefined

getNthComment :: Int -> Post -> Maybe Comment

getNthComment = undefined

Schreiben Sie nun die Funktion:

getNthLetterOfContentOfNthCommentOfNthPostOfUserWithId = what

what :: Int -> Int -> Int -> Int -> Maybe Char

what = undefined

result = foldl foldLogic [] [ what 2 0 1 128, gflofcffpouwi 2, what 1 1 0 20 , what 1 0 2 29, what 2 0 0 128, what 1 1 0 1063 , what 2 0 0 188, what 2 1 2 194, what 1 0 4 94 ]

foldLogic a (Just c) = a ++ [c] foldLogic a _ = a