我想知道(answers entry)
中totnChars entry = myLoop (answers entry)
的用法是什么。这是否意味着条目必须是answers
类型?但不是entry
类型的Entryt
?
type Question = [Char]
type Answer = [Char]
type Music = [Char]
data Entryt = MyEntry {
questions :: [Question],
answers :: [Answer],
music :: Music,
time :: Float
} deriving (Show, Eq)
totnChars :: Entryt -> Int
totnChars entry = myLoop (answers entry)
myLoop :: [Answer] -> Int
myLoop [] = 0
myLoop (x:rest) = (nChars x 0) + (myLoop rest)
答案 0 :(得分:5)
answers
是一个getter函数,用于检索给定的条目答案列表,因此totnChars entry = myLoop (answers entry)
定义了一个函数,该函数接受一个条目并将myLoop
应用于该条目的答案列表。
这是否意味着条目必须是类型答案?
没有。说某事必须属于给定类型的语法是expression :: Type
,但answers
不是类型。类型名称始终以Haskell中的大写字母开头。您可以引入一个名为answers
的变量类型,但没有任何意义。这绝对不是这里发生的事情。 answers entry
只是一个普通的旧函数应用程序。
但是不是Entryt类型的输入吗?
是的,是的。
答案 1 :(得分:3)
answers
没有类型[Answer]
。它的类型为Entryt -> [Answer]
。
“但为什么?”你可能会问。
每个Entryt
都有自己的答案列表,这些答案可能会从Entryt
变为另一个answers
。因此,Entryt
是一个函数,它接受def self.search(search)
Collection.includes(posts: :tags).where(tags: {name: search})
end
并返回其答案列表。