Add nullable types

This commit is contained in:
2019-07-03 17:54:50 +02:00
parent 91679650b5
commit 6238b2fbfa
4 changed files with 63 additions and 47 deletions

View File

@ -24,15 +24,18 @@ schema = hero :| [human, droid]
hero :: MonadPlus m => Resolver m
hero = Schema.objectA "hero" $ \case
[] -> character artoo
[Argument "episode" (ValueInt n)] -> character . getHero $ fromIntegral n
[Argument "episode" (ValueEnum "NEWHOPE")] -> character $ getHero 4
[Argument "episode" (ValueEnum "EMPIRE" )] -> character $ getHero 5
[Argument "episode" (ValueEnum "JEDI" )] -> character $ getHero 6
_ -> ActionT $ throwE "Invalid arguments."
human :: MonadPlus m => Resolver m
human = Schema.objectA "human" $ \case
[Argument "id" (ValueString i)] -> character =<< lift (getHuman i)
human = Schema.nullableObject "human" $ \case
[Argument "id" (ValueString i)] -> do
humanCharacter <- lift $ return $ getHuman i >>= Just
case humanCharacter of
Nothing -> return Nothing
Just e -> Just <$> character e
_ -> ActionT $ throwE "Invalid arguments."
droid :: MonadPlus m => Resolver m