inputClassDesc :: Reader DrasilState String
inputClassDesc = do
  g <- ask
  let cname = "InputParameters"
      inClassD [] = ""
      inClassD _ = "Structure for holding the " ++ stringList [
        inPs $ extInputs $ csi $ codeSpec g,
        dVs $ "derived_values" `elem` defList (codeSpec g),
        cVs $ filter (flip member (Map.filter (cname ==) 
          (eMap $ codeSpec g)) . codeName) (constants $ csi $ codeSpec g)]
      inPs [] = ""
      inPs _ = "input values"
      dVs False = ""
      dVs _ = "derived values"
      cVs [] = ""
      cVs _ = "constant values"
  return $ inClassD $ inputs $ csi $ codeSpec g
inputClassDesc :: Reader DrasilState String
inputClassDesc = do
  g <- ask
  let cname = "InputParameters"
      inClassD [] = ""
      inClassD _ = "Structure for holding the " ++ stringList [
        inPs $ extInputs $ csi $ codeSpec g,
        dVs $ "derived_values" `elem` defList (codeSpec g),
        cVs $ filter (flip member (Map.filter (cname ==) 
          (eMap $ codeSpec g)) . codeName) (constants $ csi $ codeSpec g)]
      inPs [] = ""
      inPs _ = "input values"
      dVs False = ""
      dVs _ = "derived values"
      cVs [] = ""
      cVs _ = "constant values"
  return $ inClassD $ inputs $ csi $ codeSpec g
inputClassDesc = do
  g <- ask
  let cname = "InputParameters"
      inClassD [] = ""
      inClassD _ = "Structure for holding the " ++ stringList [
        inPs $ extInputs $ csi $ codeSpec g,
        dVs $ "derived_values" `elem` defList (codeSpec g),
        cVs $ filter (flip member (Map.filter (cname ==) 
          (eMap $ codeSpec g)) . codeName) (constants $ csi $ codeSpec g)]
      inPs [] = ""
      inPs _ = "input values"
      dVs False = ""
      dVs _ = "derived values"
      cVs [] = ""
      cVs _ = "constant values"
  return $ inClassD $ inputs $ csi $ codeSpec g