我正试图弄清楚如何为类型Foo实现MonadBaseControl的实例,这是一个围绕StateT实例的newtype包装器。你会认为它会像this那样实现,但似乎并非如此。我假设状态块在这里导致问题,那么有没有办法放弃它?
代码:
y
错误:
x <- c(3,7,9)
y <- 20
possible <- y %/% x
#[1] 6 2 2
out <- unique(sequence(possible) * rep(x,possible))
# or alternatively
# out <- unique(unlist(Map(function(a,b) sequence(a) * b, possible, x)))
out
#[1] 3 6 9 12 15 18 7 14
sum(out)
#[1] 84
答案 0 :(得分:8)
为了避免UndecidableInstances
,链接的答案扩展了一个类型系列,为了人类的可读性,它真的不应该有。即,他写道
instance MonadBaseControl IO Foo where
type StM Foo a = a
而有人可能会考虑写
instance MonadBaseControl IO Foo where
type StM Foo a = StM (ReaderT Int IO) a
更清楚地说明如何为给定的newtype包装选择正确的右侧。通过类似的更改(和UndecidableInstances
),您的代码可以正常工作。如果你想避免UndecidableInstances
,你可以在链接的答案中完成相同的扩展;询问ghci扩展应该是这样的一个例子:
> :kind! forall a. StM (StateT Int IO) a
forall a. StM (StateT Int IO) a :: *
= (a, Int)
因此对StateT
Foo
版本的instance MonadBaseControl IO Foo where
type StM Foo a = (a, Int)
我们也可以写:
SonataAdminBundle::standard_layout.html.twig