Example: https://godbolt.org/z/KxY5Gz8Wx
Consider about making ADT for describing simple abstract syntax tree(AST) like below in haskell.
data Expr = FloatLit Float |
Symbol String |
Let (String,Expr,Expr) |
App (Expr,[Expr]) |
Lambda ([String], Expr)