packages feed

inline-python-0.1: py/bound-vars.py

"""
Extract variable names to be bound by haskell code
"""
import ast
import sys
import re
import base64

mode  = sys.argv[1]
is_hs = re.compile('.*_hs$')

def extract_hs_vars(code):
    for node in ast.walk(code):
        if isinstance(node, ast.Name) and is_hs.match(node.id):
            yield node.id

def print_hs_vars(src):
    code = ast.parse(src, '<interactive>', mode)
    for nm in set(extract_hs_vars(code)):
        print(nm)

def decode_and_print(codeB64):
    print_hs_vars(base64.b16decode(codeB64, casefold=True).decode('utf8'))