@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]
: とは何のことですか。(/=) に独自実装を与えられなくなる予定とのことですが、これって効率的には問題ないんですか? 等しくないと分かれば早く抜けられるケースもある気もしますが。