Я новичок в Snap и Haskell. Я пытаюсь включить этот вывод:Haskell Snap rendering JSON с маршрута
[("LDPNLNDQQFHUKIWZII",2191.12),("NLNDQQFHUKIWZIIXDC",2195.0696),("NZRAIEUALDPNLNDQQFH",2192.0503)]
в формате JSON. Так что я знаю, что тип [(String, Double)], но это не помогает мне с сообщением об ошибке, возникающей из GHCi при входе writeJSON [("LDPNLNDQQFHUKIWZII",2191.12),("NLNDQQFHUKIWZIIXDC",2195.0696),("NZRAIEUALDPNLNDQQFH",2192.0503)]
:
No instance for (MonadSnap m0) arising from a use of `writeJSON' The type variable `m0' is ambiguous Possible fix: add a type signature that fixes these type variable(s) Note: there are several potential instances: instance MonadSnap m => MonadSnap (Control.Monad.Trans.Cont.ContT c m) -- Defined in `snap-core-0.9.5.0:Snap.Internal.Instances' instance (MonadSnap m, Control.Monad.Trans.Error.Error e) => MonadSnap (Control.Monad.Trans.Error.ErrorT e m) -- Defined in `snap-core-0.9.5.0:Snap.Internal.Instances' instance MonadSnap m => MonadSnap (Control.Monad.Trans.List.ListT m) -- Defined in `snap-core-0.9.5.0:Snap.Internal.Instances' ...plus 8 others In the expression: writeJSON x In an equation for `it': it = writeJSON x
Я не женат на текущих данных (я просто создал его, чтобы сгустить аминокислотную последовательность с его массой). В идеале я хотел бы получить данные JSON, который выглядит следующим образом:
{ "LDPNLNDQQFHUKIWZII":2191.12, "NLNDQQFHUKIWZIIXDC":2195.0696, "NZRAIEUALDPNLNDQQFH":2192.0503 }
Выход, [("LDPNLNDQQFHUKIWZII",2191.12),("NLNDQQFHUKIWZIIXDC",2195.0696),("NZRAIEUALDPNLNDQQFH",2192.0503)]
, вычисляется с помощью функции, которая принимает два куска ввода от пользователя: исходной пептидной последовательности, и вес (программа находит фрагменты из пептидной последовательности, которые равны введенному весу).
Любая помощь/направление приветствуется. Благодаря!
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Я создал приложение с помощью snap init barebones
. Вот как выглядит обработчик. Я получаю ошибку на линии writeJSON result
. Я намереваюсь использовать линии getParam, но для начала я просто пытался получить ответ JSON.
possibleMatches :: Snap()
possibleMatches = do
peptideSequence <- getParam "peptide_sequence"
weight <- getParam "weight"
let sequence = "V(3D)NK(3F)NKEXCNZRAIEUALDPNLNDQQFHUKIWZIIXDC"
let weight = 2194.9
let results = calculationResults weight sequence
let result = take 1 [ seq | (seq,wt) <- results ]
maybe (writeBS "must specify params in URL")
writeJSON result
Ошибка компилятора является:
Couldn't match expected type `Maybe a0'
with actual type `[([Char], Float)]'
Так что мне нужно, чтобы выяснить, как бороться с Может быть. Я читаю об этом, но какая-то помощь будет оценена.
Где находятся функции 'toJSNO' и' writeJSON'? – DiegoNolan
о, простите меня. трассировка стека правильная, это функция writeJSON, исходящая из Snap.Extras.JSON. toJSON был еще одним вариантом, который я исследовал из пакета json, Text.JSON (аналогично, не повезло). –
Можете ли вы поместить немного больше кода? Это в одном из ваших обработчиков? Похоже, проблема в том, что вам нужно указать экземпляр «MonadSnap», который вы используете, но компилятор не может вывести его из кода, который у вас есть. По умолчанию 'MonadSnap' вы будете, если вы просто используете, когда snap генерирует, когда вы вводите' snap init default', будет 'Handler App App'. Если вы поместили эту функцию в другую монаду, это может быть проблемой. – DiegoNolan