diff --git a/src/Cryptol/Parser.y b/src/Cryptol/Parser.y index 29641be53..66e86bd8e 100644 --- a/src/Cryptol/Parser.y +++ b/src/Cryptol/Parser.y @@ -468,7 +468,7 @@ enum_body :: { [TopLevel (EnumCon PName)] } enum_con :: { TopLevel (EnumCon PName) } : app_type {% mkConDecl Nothing Public $1 } - | doc 'v{' app_type 'v}' {% mkConDecl (Just $1) Public $3 } + | doc app_type {% mkConDecl (Just $1) Public $2 } | 'private' 'v{' app_type 'v}' {% mkConDecl Nothing Private $3 } | doc 'private' 'v{' app_type 'v}' {% mkConDecl (Just $1) Private $4 } diff --git a/src/Cryptol/REPL/Help.hs b/src/Cryptol/REPL/Help.hs index e0ad8cde5..4dc7cd42e 100644 --- a/src/Cryptol/REPL/Help.hs +++ b/src/Cryptol/REPL/Help.hs @@ -324,10 +324,21 @@ showValHelp ctxparams env nameEnv qname name = doShowDocString ifDeclDoc - -- XXX: enum constructors - fromNewtype = - do _ <- Map.lookup name (M.ifNewtypes env) - return $ return () + fromNewtype = Map.lookup name allCons + + allCons = foldr addCons mempty (M.ifNewtypes env) + where + getDocs nt = + case T.ntDef nt of + T.Struct {} -> [ T.ntDoc nt ] + T.Enum cs -> map T.ecDoc cs + + addCons nt mp = foldr addCon mp + (zip (T.newtypeConTypes nt) (getDocs nt)) + addCon ((c,t),d) = Map.insert c $ + do rPutStrLn "" + rPrint (runDoc nameEnv $ indent 4 $ hsep [ pp c, ":", pp t ]) + doShowDocString d allParamNames = case ctxparams of