JArray
является конструктором значения, а не типом.Вы не можете использовать JArray
в сигнатурах типов. * Это на самом деле объясняется в ошибке: Not in scope: <strong>type constructor</strong> or <strong>class</strong> `JArray'
.
Поскольку мы видим это:
data JValue = JString String
| JNumber Double
| JBool Bool
| JNull
| JObject [(String,JValue)]
| JArray [JValue] -- This line defines JArray
Итак JArray :: [JValue] -> JValue
,Рассматривая вашу функцию, но игнорируя ошибочную сигнатуру типа:
getArray (JArray arr) = Just arr
-- ^ arr :: [JValue], so Just arr :: Maybe [JValue]
getArray _ = Nothing
-- ^ Nothing :: Maybe a
Итак, поскольку вы сопоставляете шаблон с некоторыми JValue
, функция имеет тип getArray :: JValue -> Maybe [JValue]
.Это потому, что типы и обитатели этого типа различны.
*, за исключением DataKinds
, но это отдельная проблема.