newtype Parser a = Parser (String -> [(a,String)])
こんにちは、上記の定義を考えてみましょう: 私の目には、無限の定義 - 再帰的な定義です。たとえば、私は、ツリーを定義したような(再帰的な、無限の構造):newtypeと再帰的定義
data Tree a = Leaf | Node (Tree a) (Tree a).
そしてTree
はinifiniteことができるが、我々はLeaf
を持っており、それが再帰的定義を「終える」ことができます。
data Parser a = Parser (String -> [(a,String)])
(ちょうどhttps://wiki.haskell.org/Newtypeによるnewtype-置き換える) そしてそれは、再帰的な定義であるとLeaf
ようには「有限要素」がない。だから、data
に私の最初の定義を翻訳してみましょう。それを理解する方法?
再帰はどこですか? (データ)コンストラクタ "Parser"を持つ型(コンストラクタ) "Parser"を定義します。定義された型は右側にはありません。 – d8d0d65b3f7cf42
'データツリーa =リーフ|ノード(ツリーa)(ツリーa).'ここで再帰はありますか? – Gilgamesz
また、意味的には、 'newtype'と' data'の間に違いはありませんので、あなたは本当に別のことをしていません。 – Emil