module Exercise_12 where import qualified Data.ByteString as BS {- Library -- nicht veraendern -} data Html = Text String | Block String [Html] deriving Show html_ex1 = Text "Every string should learn to swim" html_ex2 = Block "head" [] html_ex3 = Block "body" [Block "p" [Text "My cat"], Text "is not a float"] html_ex4 = Text "Sei Epsilon < 0" html_ex5 = Text "Üblicherweise ist 𝜀 > 0" data Expr = Input Integer | Add Expr Expr | Sub Expr Expr | Mul Expr Expr deriving (Show, Eq) foldExpr :: (Integer -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> Expr -> a foldExpr f _ _ _ (Input n) = f n foldExpr f g h i (Add e1 e2) = g (foldExpr f g h i e1) (foldExpr f g h i e2) foldExpr f g h i (Sub e1 e2) = h (foldExpr f g h i e1) (foldExpr f g h i e2) foldExpr f g h i (Mul e1 e2) = i (foldExpr f g h i e1) (foldExpr f g h i e2) {- G12.1 -} {- Folgende Funktionen können Sie zur Lösung verwenden (andere Funktionen sind natürlich auch gestattet): -- definiert in Data.ByteString -- entpackt den ByteString in eine Liste von Byte-Werten (Word8 = Byte) unpack :: ByteString -> [Word8] -- definiert in Data.ByteString -- packt eine Liste von Byte-Werten in einen ByteString pack :: [Word8] -> ByteString -- definiert in Data.Bits -- Links-Shift um n Stellen shiftL :: Word8 -> Int -> Word8 -- definiert in Data.ByteString -- schreibt einen ByteString in eine Datei writeFile :: FilePath -> ByteString -> IO () -- definiert in Data.ByteString -- liest einen ByteString aus einer Datei readFile :: FilePath -> IO ByteString -} compress :: String -> FilePath -> IO () compress = undefined decompress :: FilePath -> IO (Maybe String) decompress = undefined {- G12.2 -} plainHtml :: Html -> String plainHtml = undefined {- H12.1 -} {- Folgende Funktionen können Sie zur Lösung verwenden (andere Funktionen sind natürlich auch gestattet): -- definiert in Data.ByteString -- liest von der Standardeingabe, gibt einen Stream von Bytes getContents :: IO ByteString -- definiert in Data.ByteString -- entpackt den ByteString in eine Liste von Byte-Werten (Word8 = Byte) unpack :: ByteString -> [Word8] -- definiert in Data.Bits -- testet, ob ein bestimmtes Bit in einem Byte gesetzt ist testBit :: Word8 -> Int -> Bool -} base64 :: BS.ByteString -> [Char] base64 bs = undefined main :: IO () main = return () {- H12.2 -} checkExpr :: [Integer] -> Integer -> Maybe Expr checkExpr inputs target = Nothing -- undefined approxExpr :: [Integer] -> Integer -> Expr approxExpr inputs target = undefined