【发布时间】:2026-01-06 12:15:01
【问题描述】:
最近我一直在玩 Haskell,尤其是整个仿函数概念。我越深入了解它,我得到的兴奋时刻就越多,而且它肯定会让我的多巴胺受体发痒。
我遇到的问题如下。这是有效的代码,它提升了函数,然后首先将其应用于 IO 值,然后应用于列表。
replicator1 =
fmap (replicate 3)
replicator2 =
fmap (replicate 3)
main = do
replicated <- replicator1 getLine
print (replicator2 replicated)
用更简洁的方式写它是很诱人的,即:
replicator =
fmap (replicate 3)
main = do
replicated <- replicator getLine
print (replicator replicated)
我的一部分说它在概念上是正确的,因为replicator 应该适用于 IO 和 List 实例,但是作为强类型语言 Haskell 不允许我这样做。我想我很明白为什么会这样。
问题是:有什么方法可以让我更接近后一种变体?还是和前者一起生活好吗?
谢谢!
【问题讨论】:
-
A l w a y s _ u s e _ t y p e _ s i g n a t u r e s _ a t _ t h e _ t o p _ l e v e l.
标签: haskell functor monomorphism-restriction