[Haskell-cafe] Re: haskell core definition

Ashley Yakeley ashley at semantic.org
Mon Sep 8 20:49:58 EDT 2008


Vlad Skvortsov wrote:
> Also, how do I demangle the names? It seems that, for example,  
> 'base:GHC.Base.ZC' is a (:) function on strings, but where how am I 
> supposed to figure that out?
-------------- next part --------------
#!/usr/bin/perl
# Written by Ashley Yakeley 2003
# All rights to the public

while (<>)
	{
	s/_/ /g;
	s/\w+/decode($&)/eg;
	print;
	}

sub commas
	{
	local($i) = @_;
	if ($i == 0)
		{
		return "";
		}
	elsif ($i == 1)
		{
		return " ";
		}
	else
		{
		return "," x ($i - 1);
		}
	}

sub decode
	{
	local($s) = @_;
	my $a="";
	while ($s =~/([^zZ]*)([zZ].*)/)
		{
		$a.=$1;
		if ($2 =~/([zZ][A-Za-z])(.*)/)
			{
				{
				$a.="(",last if $1 =~/ZL/;
				$a.=")",last if $1 =~/ZR/;
				$a.="[",last if $1 =~/ZM/;
				$a.="]",last if $1 =~/ZN/;
				$a.=":",last if $1 =~/ZC/;
				$a.="Z",last if $1 =~/ZZ/;

				$a.="z",last if $1 =~/zz/;
				$a.="&",last if $1 =~/za/;
				$a.="|",last if $1 =~/zb/;
				$a.="^",last if $1 =~/zc/;
				$a.='$',last if $1 =~/zd/;
				$a.="=",last if $1 =~/ze/;
				$a.=">",last if $1 =~/zg/;
				$a.="#",last if $1 =~/zh/;
				$a.=".",last if $1 =~/zi/;
				$a.="<",last if $1 =~/zl/;
				$a.="-",last if $1 =~/zm/;
				$a.="!",last if $1 =~/zn/;
				$a.="+",last if $1 =~/zp/;
				$a.="'",last if $1 =~/zq/;
				$a.="\\",last if $1 =~/zr/;
				$a.="/",last if $1 =~/zs/;
				$a.="*",last if $1 =~/zt/;
				$a.="_",last if $1 =~/zu/;
				$a.="%",last if $1 =~/zv/;
				$a.="???";
				}
			$s = $2;
			}
		elsif ($2 =~/Z([0-9]+)T(.*)/)
			{
			$a.="(".commas($1).")";
			$s = $2;
			}
		elsif ($2 =~/Z([0-9]+)H(.*)/)
			{
			$a.="(#".commas($1)."#)";
			$s = $2;
			}
		elsif ($2 =~/Z([0-9]+)U(.*)/)
			{
			$a.=chr($1);
			$s = $2;
			}
		else
			{
			$a.="???".$2;
			$s = "";
			}
		};
	return $a.$s;
	};


More information about the Haskell-Cafe mailing list