How can I display signatures and structures, by looking up their name in
the current environment, in Poly/ML 5.6?

The PolyML.NameSpace structure seems to have been reorganised quite a bit,
so the code given previously does not work.

On 29 January 2010 at 04:30, David Matthews <[email protected]>
wrote:

>
> Ramana Kumar wrote:
>
>> The compiler does maintain the declaration location of identifiers and in
>>> the experimental IDE it's possible to click on an identifier and go to
>>> the
>>> source file where it was declared.
>>>
>>
>> I'd love if the locations stored by the compiler were exposed by a
>> procedure too, since I'd rather avoid an IDE.
>>
>
> Actually I think the information can be got at but in a rather indirect
> way by using the displayVal/displayStruct etc functions.  They produce
> information about how to pretty print values and also information in the
> "context" about where the value was declared.  This is intended for use by
> the IDE when printing the information but it could be extracted
> programmatically.
>
> Poly/ML 5.3 Release
> >
> local
>     open PolyML
>     open NameSpace
> in
>     fun getVal name = displayVal(valOf(#lookupVal globalNameSpace name),
> 1000(*depth*), globalNameSpace)
> end;
> > # # # # # val getVal = fn : string -> PolyML.pretty
> > PolyML.print_depth 100;
> val it = () : unit
> > getVal "rev";
> val it =
>    PrettyBlock
>     (3, false, [],
>      [PrettyBlock
>        (0, false, [],
>         [PrettyString "val", PrettyBreak (1, 0),
>          PrettyBlock
>           (0, false,
>            [ContextLocation
>              {file = "./basis/List.sml", endLine = 188, startLine = 188,
>               endPosition = 0, startPosition = 0}], [PrettyString "rev"]),
>          PrettyBreak (1, 0), PrettyString "="]), PrettyBreak (1, 0),
>       PrettyString "fn", PrettyBreak (1, 0),
>       PrettyBlock
>        (3, false, [],
>         [PrettyString ":", PrettyBreak (1, 3),
>          PrettyBlock
>           (0, false, [],
>            [PrettyBlock
>              (0, false, [],
>               [PrettyString "'a", PrettyBreak (1, 0),
>                PrettyBlock
>                 (0, false,
>                  [ContextLocation
>                    {file = "Standard Basis", endLine = 0, startLine = 0,
>                     endPosition = 0, startPosition = 0}],
>                  [PrettyString "list"])]), PrettyBreak (1, 0),
>             PrettyString "->", PrettyBreak (1, 0),
>             PrettyBlock
>              (0, false, [],
>               [PrettyString "'a", PrettyBreak (1, 0),
>                PrettyBlock
>                 (0, false,
>                  [ContextLocation
>                    {file = "Standard Basis", endLine = 0, startLine = 0,
>                     endPosition = 0, startPosition = 0}],
>                  [PrettyString "list"])])])])]) : PolyML.pretty
> >
> The location information is in the first ContextLocation entry.  The
> others refer to the locations of the "list" type constructors.
>
> Again, it's possible that there are hooks already to do this but they
>>> aren't
>>> easily accessible.  All this could be done with time but it really
>>> requires
>>> someone to work on improving all this.
>>>
>>
>> Are there many developers? Who can join them?
>>
>
> Well, I'm the only one doing very much developing and it depends on
> fitting it around other work.  Lucas Dixon has been working on the jEdit
> plugin and various other people have made contributions.  It would be good
> to get more people involved.  The best way to get started is to find some
> feature that you yourself want and try and write it.  I'll do what I can to
> help.
>
> Regards,
> David
>
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to