Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

Angabe A9-4

Code Vorlage zu Aufgabe A9-4

Haskell source code icon AngabeA9-4.hs — Haskell source code, 1 KB (1386 bytes)

Dateiinhalt

type Input  = String -- Eingabetyp
type Output = String -- Ausgabetyp

-- Der monadische Typ:
newtype IOLineProcess a = ILP (Input -> (a,Output,Input))

-- Monadendeklaration, 
-- dabei sind keine Typsignaturen erlaubt,
-- weshalb diese zur Erinnerung als Kommentar enthalten sind
instance Monad IOLineProcess where
  -- return :: a -> IOLineProcess a
  return x = ILP $ \input -> (x,[],input)  
  
  -- (>>=) :: IOLineProcess a -> (a -> IOLineProcess b) -> IOLineProcess b
  (ILP ilp1) >>= (ilp2) = 
    ILP $ \input -> 
      let (result1,output1,input1) = ilp1  input 
          (ILP ilp2')              = ilp2  result1
          (result2,output2,input2) = ilp2' input1
      in  (result2,output1++output2,input2)
  
runILP_ :: (IOLineProcess a) -> Input -> Output
runILP_ (ILP ilp) input = snd3 $ ilp input 

lpPutStr :: Output -> IOLineProcess ()
lpPutStr s = undefined                          -- TODO!

lpPutStrLn :: Output -> IOLineProcess ()
lpPutStrLn s = undefined                        -- TODO!

lpGetLine :: IOLineProcess Input
lpGetLine = undefined                           -- TODO!

snd3 :: (a,b,c) -> b
snd3 (a,b,c) = undefined                        -- TODO!
  
main :: IO ()  
main = interact $ runILP_ $ do lpPutStrLn "Wie heisst Du?"
                               name <- lpGetLine
                               lpPutStrLn $ "Du heisst wirklich " ++ name ++ "?"

Artikelaktionen

abgelegt unter:

Funktionsleiste