我对Haskell缺乏经验,但基本上我已经开始使用DataKinds和GADT了。我有一个GADT代表一个"知道"它的长度:
data NSL :: N -> * -> * where
Null :: NSL 'Zero a
More :: a -> NSL n a -> NSL ('Incr n) a
是从自然数据表示
创建的data N :: * where
Zero :: N
Incr :: N -> N
所以我的问题是,如何创建一个函数
fromList :: [a] -> NSL n a
我尝试过使用可折叠和类似的想法,但我无法完全理解它。