【发布时间】:2010-10-23 20:53:40
【问题描述】:
这是对previous question; I got an answer I didn't really understand 的跟进,但已被接受。所以我再问一遍。
我还是不明白这是怎么回事:
type Parse a b = [a] -> [(b,[a])]
build :: Parse a b -> ( b -> c ) -> Parse a c
build p f inp = [ (f x, rem) | (x, rem) <- p inp ]
现在,显然p 绑定到Parse a b 类型的第一个参数。而且,很明显f 绑定到第二个参数(b -> c)。我的问题仍然是inp 绑定到什么?
如果Parse a b 是[a] -> [(b,[a])] 的类型同义词,我认为从最后一个问题中我可以替换它:
build :: [a] -> [(b,[a])] -> ( b -> c ) -> [a] -> [(c,[a])]
但是,我认为这个定义也没有任何意义:
build p f inp = [ (f x, rem) | (x, rem) <- p inp ]
有人能解释一下类型同义词吗?
【问题讨论】:
标签: haskell types polymorphism type-synonyms