haskell - Passing different number of the arguments -
i have this:
(aeson.object jsonobject) -> case (hashmap.lookup "high" jsonobject, hashmap.lookup "low" jsonobject) of (just (string val), (string val2)) -> [val, val2] _ -> error "couldn't both keys" i'd able pass "high" , "low" arguments , pattern matching on them retrieve actual values json. and, of course, number of such arguments can vary.
parsejson :: [string] -> [string] parsejson keys = (aeson.object jsonobject) -> case (?????) of (?????) -> ???? _ -> error "couldn't retrieve keys" how can this?
try this. assume (aesonobject.jsonobject) refers case of existing case expression, it's not syntactically valid otherwise.
import control.monad ( sequence ) getstring (just (string value)) = value getstring _ = nil parsejson :: [string] -> [string] parsejson keys = case ... of (aeson.object jsonobject) -> case sequence (map (getstring . flip hashmap.lookup jsonobject) keys) of values -> values _ -> error "couldn't retrieve keys" flip hashmap.lookup jsonobject gives lookup function key value (which maybe. composing getstring gives succeeds on string values, in same way existing inline pattern-match does.
finally, sequence on maybe monad turns [maybe string] maybe [string], returning just output if elements of input just.
haskell
No comments:
Post a Comment