fnum ::  ( Show c , Con.Check c m , Con.ConfigC c m , Machine m dat conf )
     => Con.Config c m 
     -> Int
     -> IO ( Reporter ( N.Type c m ))
fnum conf key = do
    xss <- testliste 
        ( Con.num_args conf ) ( Con.arity conf ) ( Con.max_arg conf )
    let xs = map M.Var [ 1 .. fromIntegral $ Con.arity conf ]
    return $ return $ N.Make { N.op = Con.op conf
              , N.key = fromIntegral key
              , N.fun_info = fsep 
                     [ text "\\" , toDoc xs , text "->", toDoc $ Con.op conf ]
              , N.extra_info = vcat $
                (text "Die Maschine soll die folgenden Bedingungen erfüllen:") 
                 : 
                (do c <- map show ( Con.checks conf) ++ Con.conditions conf
                    return $ nest 4 $ text $ "* " ++ c
                )
              , N.args = xss
            , N.cut = Con.cut conf
            , N.checks = Con.checks conf
            , N.start = Con.start conf
              }

fnum ::  ( Show c , Con.Check c m , Con.ConfigC c m , Machine m dat conf )
     => Con.Config c m 
     -> Int
     -> IO ( Reporter ( N.Type c m ))
fnum conf key = do
    xss <- testliste 
        ( Con.num_args conf ) ( Con.arity conf ) ( Con.max_arg conf )
    let xs = map M.Var [ 1 .. fromIntegral $ Con.arity conf ]
    return $ return $ N.Make { N.op = Con.op conf
              , N.key = fromIntegral key
              , N.fun_info = fsep 
                     [ text "\\" , toDoc xs , text "->", toDoc $ Con.op conf ]
              , N.extra_info = vcat $
                (text "Die Maschine soll die folgenden Bedingungen erfüllen:") 
                 : 
                (do c <- map show ( Con.checks conf) ++ Con.conditions conf
                    return $ nest 4 $ text $ "* " ++ c
                )
              , N.args = xss
            , N.cut = Con.cut conf
            , N.checks = Con.checks conf
            , N.start = Con.start conf
              }
fnum conf key = do
    xss <- testliste 
        ( Con.num_args conf ) ( Con.arity conf ) ( Con.max_arg conf )
    let xs = map M.Var [ 1 .. fromIntegral $ Con.arity conf ]
    return $ return $ N.Make { N.op = Con.op conf
              , N.key = fromIntegral key
              , N.fun_info = fsep 
                     [ text "\\" , toDoc xs , text "->", toDoc $ Con.op conf ]
              , N.extra_info = vcat $
                (text "Die Maschine soll die folgenden Bedingungen erfüllen:") 
                 : 
                (do c <- map show ( Con.checks conf) ++ Con.conditions conf
                    return $ nest 4 $ text $ "* " ++ c
                )
              , N.args = xss
            , N.cut = Con.cut conf
            , N.checks = Con.checks conf
            , N.start = Con.start conf
              }