ありがとうございます。みてみます。
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 8.6.5 $ stack path --compiler-bin ~/.stack/programs/x86_64-osx/ghc-8.6.5/bin $ which hie ~/.local/bin/hie $ ~/haskell-ide-engine/.stack-work/install/x86_64-osx/hogehogehoge/8.6.5/bin/cabal-helper-wrapper "print-build-platform" x86_64-osx
1. ブラウザからDLした古い verison の vscode を rm コマンドで削除 2. brew cask install visual-studio-code
http-clientの`Network.Http.Simple.httpJSON` について質問ですRight、それ以外なら Leftに包んで返したいです。response に getResponseBodyを使うと、強制的に成功時の型として扱われてパースできずにエラーになってしまい、困っています。httpJSONの代わりに httpLbsを使い、最後値を返すときにJSONとしてパースする」くらいなのですが他に方法はあるのでしょうかusersShow :: APIRequest -> ReaderT MisskeyEnv IO (Either APIError User)
usersShow req = do
env <- ask
initReq <- parseRequest $ (env^.url) ++ "/api/users/show"
let requestObject = object [ "userId" .= (req^.userId)
, "userIds" .= (req^.userIds)
, "username" .= (req^.username)
, "host" .= (req^.host)
]
request = initReq { method = "POST"
, requestBody = RequestBodyLBS $ encode requestObject
, requestHeaders =
[("Content-Type", "application/json; charset=utf-8")]
}
response <- httpJSON request
case getResponseStatusCode response of
200 -> return $ Right $ getResponseBody response
400 -> return $ Left $ getResponseBody response -- APIError型になって欲しいけどならないnewtype EitherJson a b = EitherJson (Either a b) instance (FromJSON a, FromJSON b) => FromJSON (EitherJson a b) where parseJSON v = EitherJson <$> (Right <$> parseJSON v) <|> (Left <$> parseJSON v)
foldr' が Data.List にない(`Data.Foldable` から import すれば使えますが、普通使うことはないはず) のってなんででしたっけ?+!を右から評価するものとして表すと`1 +! 2 +! (3 +! 0)` のような形になります。結局、この式を評価するには最後まで辿ってスタックを消費せねばならず、メリットがないからだと言えますx : xs における x と xs の分だけスタックを消費してる、というイメージで合ってますかね?+! がeagerにパターンマッチするからリストの長さだけスタックを消費してる、と。exL = exL'
foldl' (+) 0 [1..1000] と foldl (+) 0 [1..1000] は同じ式として最適化されたってことですか... 正格性解析の結果でしょうか... すごい。