下面的交互展示了如何使用Haskell可用的Math.Combinatorics.Species库的最新版本(0.4版)枚举集合的子集。我想知道如何使用相同的库来枚举一个集合的分区,但是我不能理解和修复我得到的类型错误。更具体地说,我不理解分区的structureType,":Set Set“是什么意思?
vamsi@vamsi-laptop:~/learn/project_euler$ ghci -XNoImplicitPrelude
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
> import qualified Math.Combinatorics.Species as S
S> import qualified Data.Int as I
S I> S.structureType S.subset
"Set"
S I> S.enumerate S.subset [1,2,3] :: [S.Set I.Int]
[{},{3},{2},{2,3},{1},{1,3},{1,2},{1,2,3}]
S I> S.structureType S.partition
": Set Set"
S I> S.enumerate S.partition [1,2,3] :: [S.Set (S.Set I.Int)]
<interactive>:6:26: error:
• No instance for (GHC.Num.Num (S.Set I.Int))
arising from the literal ‘1’
• In the expression: 1
In the second argument of ‘S.enumerate’, namely ‘[1, 2, 3]’
In the expression:
S.enumerate S.partition [1, 2, 3] :: [S.Set (S.Set I.Int)]
S I> S.enumerate S.partition [1,2,3] :: [(S.Set I.Int)]
[{*** Exception: Structure type mismatch.
Expected: Set Int
Inferred: : Set Set Int
CallStack (from HasCallStack):
error, called at ./Math/Combinatorics/Species/Enumerate.hs:176:33 in
species-0.4-DcNHk9r6nze3hHzRydgNb3:Math.Combinatorics.Species.Enumerate发布于 2018-03-04 21:30:37
这似乎是structureType使用的漂亮打印机中的一个错误。我已经报告了here的问题;同时,当您看到:.:作为类型构造函数时,您可能应该使用:。所以,就像这样:
S I> S.enumerate S.partition [1,2,3] :: [(S.Set S.:.: S.Set) I.Int]
[{{1,2,3}},{{2,3},{1}},{{2},{1,3}},{{3},{1,2}},{{3},{2},{1}}]https://stackoverflow.com/questions/49090939
复制相似问题