diff --git a/Dockerfile b/Dockerfile index a370790..e8e21c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM haskell:buster +FROM docker.io/haskell:buster RUN apt-get update && apt-get install -y haskell-platform diff --git a/code/Angabe5.hs b/code/Angabe5.hs new file mode 100644 index 0000000..dbe553b --- /dev/null +++ b/code/Angabe5.hs @@ -0,0 +1,172 @@ +module Angabe5 where + +{- 1. Vervollstaendigen Sie gemaess Angabentext! + 2. Vervollständigen Sie auch die vorgegebenen Kommentaranfänge! + 3. Loeschen Sie keine Deklarationen aus diesem Rahmenprogramm, auch nicht die Modulanweisug! + 4. Achten Sie darauf, dass `Gruppe' Leserechte fuer Ihre Abgabedatei hat! +-} + + +type Nat0 = Int + + +-- Die selbstdefinierte Typklasse Menge_von: + +class Eq a => Menge_von a where + leer :: [] a + vereinige :: [] a -> [] a -> [] a + schneide :: [] a -> [] a -> [] a + ziehe_ab :: [] a -> [] a -> [] a + ist_teilmenge :: [] a -> [] a -> Bool + ist_obermenge :: [] a -> [] a -> Bool + ist_element :: a -> [] a -> Bool + ist_leer :: [] a -> Bool + sind_gleich :: [] a -> [] a -> Bool + anzahl :: a -> [] a -> Nat0 + + -- Protoimplementierungen + leer = [] + vereinige xs ys = xs ++ ys + ist_teilmenge xs ys = ist_obermenge ys xs + ist_obermenge xs ys = ist_teilmenge ys xs + ist_element x xs = anzahl x xs >= 1 + ist_leer xs = xs == leer + sind_gleich xs ys = ist_teilmenge xs ys && ist_teilmenge ys xs + + +-- Weitere Typen: + +newtype Paar a b = P (a,b) deriving (Eq,Show) + +data Zahlraum_0_10 = N | I | II | III | IV | V | VI + | VII | VIII | IX | X | F deriving (Eq,Ord,Show) + +newtype Funktion = Fkt { f :: Zahlraum_0_10 -> Zahlraum_0_10 } + +data Baum a = Blatt a | Knoten (Baum a) a (Baum a) deriving (Eq,Show) + +newtype ElemTyp a = ET a + +-- Pseudoheterogene Elementtypen +data PH_ElemTyp a b c d e = A a | B b | C c | D d | E e deriving (Eq,Show) +data PH_ElemTyp' q r s = Q q | R r | S s deriving (Eq,Show) + + + + +-- Aufgabe A.1 + +instance Num Zahlraum_0_10 where + ... + +{- Knapp, aber gut nachvollziehbar geht die Instanzbildung fuer Num folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.2 + +instance Eq Funktion where + ... + +instance Show Funktion where + ... + +{- Knapp, aber gut nachvollziehbar gehen die beiden Instanzbildungen fuer + Eq und Show folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.3 + +instance Menge_von Int where + ... + +instance Menge_von Zahlraum_0_10 where + ... + +instance Menge_von Funktion where + ... + + +{- Knapp, aber gut nachvollziehbar gehen die drei Instanzbildungen fuer + Menge_von folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.4 + +instance (Eq a,Eq b) => Menge_von (Paar a b) where + ... + +instance Eq a => Menge_von (Baum a) where + ... + +{- Knapp, aber gut nachvollziehbar gehen die beiden Instanzbildungen fuer + Menge_von folgendermassen vor: + ... +-} + + + +-- Aufgabe A.5 + +instance Eq a => Eq (ElemTyp a) where + ... + +instance Show a => Show (ElemTyp a) where + ... + +{- Knapp, aber gut nachvollziehbar gehen die beiden Instanzbildungen fuer + Eq und Show folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.6 + +instance Eq a => Menge_von (ElemTyp a) where + ... + +{- Knapp, aber gut nachvollziehbar geht die Instanzbildung fuer + Menge_von folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.7 + +instance (Eq a,Eq b,Eq c,Eq d,Eq e) => Menge_von (PH_ElemTyp a b c d e) where + ... + +{- Knapp, aber gut nachvollziehbar geht die Instanzbildung fuer + Menge_von folgendermassen vor: + ... +-} + + + + +-- Aufgabe A.8 + +instance (Eq p,Eq q,Eq r) => Menge_von (PH_ElemTyp' p q r) where ... + + +{- Knapp, aber gut nachvollziehbar geht die Instanzbildung fuer + Menge_von folgendermassen vor: + ... +-} + +