@yuist has joined the channel
stack.yaml.lock
に関する質問です。stack.yaml
を更新したのに、ビルドで stack.yaml.lock
を更新するのを忘れて、またPRを出し直すことがたまにあります。yarn install --frozen-lockfile
というオプションがあり、lockファイルの更新が発生しようとするとエラーになってくれます。stack --lock-file read-only build
は本当にread onlyになるだけでlockファイルとの矛盾があっても関係ないようです。DP2.hs:12:1: error: Could not find module 'Data.Vector.Unboxed' Use -v (or `:set -v` in ghci) to see a list of the files searched for. | 12 | import qualified Data.Vector.Unboxed as U | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DP2.hs
を stack runghc DP2.hs
で走らせようとした時に生じたエラーメッセージです。package.yaml
の dependencies
にData
を書き加えたのですが、全く同じエラーが出ます。DP2.hs:12:1: error: Could not find module 'Data.Vector.Unboxed' Use -v (or `:set -v` in ghci) to see a list of the files searched for. | 12 | import qualified Data.Vector.Unboxed as U | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DP2.hs
を stack runghc DP2.hs
で走らせようとした時に生じたエラーメッセージです。package.yaml
の dependencies
にData
を書き加えたのですが、全く同じエラーが出ます。ここでの「プリミティブ型」という言い方は便宜的なものです。GHC 的にはプリミティブ型と言った「GHC的にはプリミティブ型といったらGHC.Primで定義されているunboxed型」と「GHC の unboxed 型をラップした型」これらの文が理解できませんでした。
ら GHC.Prim で定義されている unboxed 型のことでしょうが、ここでは「GHC の unboxed 型を
ラップした型」程度の意味です。
Error on initialize: $HOME/.cache/ghcide: createDirectory: permission denied (Permission denied)
Couldn't start client Haskell
The Haskell server crashed 5 times in the last 3 minutes. The server will not be restarted
$ chmod -R +w $HOME/.cache
The Haskell server crashed 5 times in the last 3 minutes. The server will not be restarted.
stack clean --full
でキャッシュを掃除してVSCodeを再起動したのですが依然と同じエラーが出ます。mailscript/app/Main.hs:18:1: error: Illegal variable name: 'Mail' When splicing a TH declaration: main_0 = do {bodyTpl_1 <- eitherParseFile "./template/body.txt"; titleTpl_2 <- eitherParseFile "./template/title.txt"; Data.Traversable.mapM (\property_3 -> GHC.Base.pure (Language.Haskell.TH.Syntax.BindS (Language.Haskell.TH.Syntax.VarP (Language.Haskell.TH.Syntax.mkName GHC.Base.$ ("input" GHC.Base.++ property_3))) (Language.Haskell.TH.Syntax.VarE System.IO.getLine))) ps; let {env_4 = fromPairs [(Data.Text.Lazy.unpack GHC.Base.$ Lib.key (Lib.Schema (Data.Text.Lazy.pack "mail") [Data.Text.Lazy.pack "todayWorkSchedule", Data.Text.Lazy.pack "todayOutcome", Data.Text.Lazy.pack "tomorrowWorkSchedule", Data.Text.Lazy.pack "thoughts"])) Data.Aeson.Types.ToJSON..= (Data.Aeson.Types.ToJSON.toJSON GHC.Base.$ Data.Foldable.foldl (GHC.Base.$) Main.Mail ps)]; body_5 = Data.Either.either GHC.Err.error toStrict GHC.Base.$ (bodyTpl_1 GHC.Base.>>= (`eitherRender` env_4)); title_6 = Data.Either.either GHC.Err.error toStrict GHC.Base.$ (titleTpl_2 GHC.Base.>>= (`eitherRender` env_4))}; uprint body_5; uprint title_6} | 18 | do | ^^...
data Properties = Properties [Text] deriving Show instance FromJSON Properties where parseJSON (Array v) = Properties <$> parseJSON (Array v) parseJSON _ = mzero data Schema = Schema { key :: Text , properties :: [Text] } deriving (Lift, Show) instance FromJSON Schema where parseJSON (Object v) = if size v /= 1 then fail "expected a pair." else do hs <- parseJSON (Object v) let ls = toList hs return . (\(key, Properties properties) -> Schema key properties) $ head ls toTitle :: Text -> String toTitle = let toTitleString (c:cs) = (toUpper c):cs in toTitleString . unpack schemaToData :: Schema -> Q [Dec] schemaToData schema = do name <- ( newName . toTitle $ key schema ) pure [ DataD [] name [] Nothing [ RecC ( mkName . toTitle $ key schema ) ( Prelude.map (\property -> ( mkName $ unpack property, Bang Language.Haskell.TH.NoSourceUnpackedness Language.Haskell.TH.NoSourceStrictness, ConT ''Text )) ( properties schema ) ) ] [ DerivClause Nothing [ConT ''Show, ConT ''Generic] ] , InstanceD Nothing [] (AppT (ConT ''ToJSON) (ConT name)) [] , InstanceD Nothing [] (AppT (ConT ''FromJSON) (ConT name)) [] ]
[e| ... |]
などについてもっと詳しく解説してる記事があれば誰補足してほしいです... :pray:data State = Ready 'StateA -- 型の上で次の状態を指定すれば、型安全な状態遷移を実現できるのではないか | StateA [Text] 'StateB | StateB [Text] 'Finished | Finished [Text] '() toStateA :: State -> Text -> State -- この型上で何かしらパターンマッチングをしないといけない? toStateA (Ready 'StateA) text = -- 値でパターンマッチングをすることはできない StateA [text]
:
とは何のことですか。(/=)
に独自実装を与えられなくなる予定とのことですが、これって効率的には問題ないんですか? 等しくないと分かれば早く抜けられるケースもある気もしますが。