Suppose $\Gamma$ is a nice discrete subgroup of $SL(2,\mathbb{R})$ such that the genus of the Riemann surface $\mathbb{H}/\Gamma$ is larger than 1. We know that this Riemann surface is also an algebraic curve over $\mathbb{C}$ defined by a bunch of polynomials. Is there any explicit/canonical way of going back and forth between the group $\Gamma$ and a set of polynomials defining the curve? For example, if the group is given in terms of generators and relations, is there any algorithm for obtaining a set of polynomials defining the associated curve?

Somehow I couldn't add a comment so let me write it here.

Thanks for the responses. It will take me some time to digest the suggestions and look up the references provided. Please ignore the last comment about generators and relation. Let me ask a more specific question just to clarify what I wanted. What I am wondering is whether something akin to what happens for genus one curve also happens for higher genus. Recall that if $L=\mathbb{Z}+\tau \mathbb{Z}$, then we can write an equation for the elliptic curve $\mathbb{C}/L$ with the Eisenstein series $G_4(\tau)$ and $G_6(\tau)$ as coefficients. Can we do (or hope to do) something similar if we replace $\mathbb{C}$ by $\mathbb{H}$ and the lattice by a discrete group ?