以下にソースコードがあります。その構文がわかりません。
[g | t <- ts; g <- symbols t]
は非常に奇妙です。それを説明したり、それに関連する本や文書を推薦したりするのを手伝ってください. どうもありがとうございました
type term = V of string | F of string * term list
let rec symbols = function
| V x -> [x]
| F (f, ts) -> f :: [ g | t <- ts; g <- symbols t ]
let rec functions = function
| V _ -> []
| F (f, ts) -> f :: [ g | t <- ts; g <- functions t ]