具有此示例:
type Min = Int
data Prio = Low | Medium | High deriving Show
data Task = Task {
taskDesc :: String
, taskPrio :: Prio
, taskDur :: Min
} deriving Show
taskFromTuple :: (String, Prio, Min) -> Task
taskFromTuple (tDesc, tPrio, tDur) = Task tDesc tPrio tDur
-- tasksFromList :: Functor f => f (String, Prio, Min) -> f Task
tasksFromList = fmap taskFromTuple
如果我省略tasksFromList
typesig,则会收到错误消息“ Ambiguous type var ...”。现在,这种类型的标记似乎相对简单,但仍然是要记住的许多类型之一。在编写函数之前,我是否需要很好地学习typeig,以便可以提出正确的类型?
我基本上了解类型标记的含义,但是它们很容易变得很复杂。
尽管与单态性限制问题有关,但问题却有所不同,原因是我想知道是否要花很多精力来学习在函数之前编写类型ig还是专注于函数和希望类型推断会帮我的忙。 @Chi提供了明确的答案。