haskell-jp / questions #101

Hiromi ISHII / mr_konn
HLSはLSPの仕様にはないVSCode特有の機能は使わない(LSPの範囲内で機能を提供する)という方針なので、あとはクライアント側(VSCode / emacs / vim)がLSPをどうやってどの範囲までサポートしているか、ということが問題になってきますね
Hiromi ISHII / mr_konn
VSCodeで eval や import まわりなどの薄字で出てくるアクションは LSP では Code Lens と呼ばれる機能なので、使っているクライアントで code lens をどう使うのかを調べればよさそうです
Hiromi ISHII / mr_konn
codelens の踏み込んだ設定方法等は書いてないみたいですが、vim に限らず主要なエディタでの HLSの使い方は、こちらの公式ドキュメントに書かれていたりします
https://haskell-language-server.readthedocs.io/en/latest/configuration.html#vim-or-neovim
@宮入徹也 has joined the channel
@niro has joined the channel
@canalun has joined the channel
@ has joined the channel
@原田勇大 has joined the channel
@soichi has joined the channel
module宣言のexportリストに(Cみたいに)余分なカンマを入れていいのは、いつからですか? 普通のリストのリテラルには、余分なカンマは入れられませんね。。。
Hiromi ISHII / mr_konn
それ以前がどうだったかは知らないです
... Replies ...
Hiromi ISHII / mr_konn
Git の diff を最小化するという観点では、 export 末尾にコンマ入れて良いのは理に適ってます
Hiromi ISHII / mr_konn
export, import で出来るし、正直リストやレコードについても許してもいいのになと思いますよね。Dhall なんかだと、リストの頭(!)にも書けるようになっていて、デフォルトのフォーマッタでも長くなりすぎると先頭カンマ込みで揃えるようになっていたりします。
@宮川哲 has joined the channel
@Kai Ma has joined the channel
VS Code + Haskell 拡張 で HLS がうまく動いてくれてなくて困ってます……
社のコードなので再現コードをすぐには提示できなくて申し訳ないんですが
どの辺があやしい、拡張が悪い、HLS が悪い、ghcup が悪い程度のヒントでもありがたいです
エラーメッセージはこんな
Found "/home/kazuki/Projects/Herp/xxx/hie.yaml" for "/home/kazuki/Projects/Herp/xxx/a"
Run entered for haskell-language-server-wrapper(haskell-language-server-wrapper) Version 1.7.0.0 x86_64 ghc-9.2.2
Current directory: /home/kazuki/Projects/Herp/xxx
Operating system: linux
Arguments: ["--lsp"]
Cradle directory: /home/kazuki/Projects/Herp/xxx
Cradle type: Stack

Tool versions found on the $PATH
cabal:		3.6.2.0
stack:		2.7.5
ghc:		8.10.7


Consulting the cradle to get project GHC version...
Project GHC version: 8.10.7
haskell-language-server exe candidates: ["haskell-language-server-8.10.7","haskell-language-server"]
Launching haskell-language-server exe at:/mnt/wslg/runtime-dir/ghcup-ghc-8.10.7_cabal-3.6.2.0_hls-1.7.0.0_stack-2.7.5/haskell-language-server-8.10.7
[0;31mGHC ABIs don't match![0m
[0;31m[0m
[0;31mExpected: Cabal-3.2.1.0:9aa4b9691119bc22fff33e788e96f702 array-0.5.4.0:84daffa90f3ca103cdf9f63b2e3dc42b base-4.14.3.0:87b3b0c5158079c42ae6b245bc931ed6 binary-0.8.8.0:e62e03d2b43d75f2961c02cb6b402737 bytestring-0.10.12.0:6f2aed7f354af02db1f34ddfd14594ee containers-0.6.5.1:f6a92e5d06a39627f4d849cd8046c0e7 deepseq-1.4.4.0:a521405ea2fb9cce775751ee169e6ef9 directory-1.3.6.0:0491e2b3e32242cb6c06688e9c6be0e4 exceptions-0.10.4:ce3e15c9ecb7c913c26e3d6fdf3be66e filepath-1.4.2.1:eff0de9acad3e94ecfae52309ec1d282 ghc-8.10.7:35e7e70f486b33bfa497ab256892777f ghc-boot-8.10.7:05969f5326bb9e37dc11361437706d9b ghc-boot-th-8.10.7:791b63caa8da80a80012db3b6e58055a ghc-compact-0.1.0.0:8adf73318a141525e030105b243fc1e4 ghc-heap-8.10.7:2804610a013fc492b7a5cd5f4cacc218 ghc-prim-0.6.1:0de0fc5f97fc1327fa41d908bc0fa855 ghci-8.10.7:634a2e7c4fab9b3ee3084b289675b14e haskeline-0.8.2:d7fd4f62a2c7e73f1a18d031688a46db hpc-0.6.1.0:564959df2eff2f2d904aeb5475adb4ec integer-gmp-1.0.3.0:bb2d3eb35c9ec3512ba0dc3a025970db libiserv-8.10.7:a97f6b549f5162fd72bd80f444ad4f07 mtl-2.2.2:3017f49a70971fbc4297d718565e8ee7 parsec-3.1.14.0:53a9bc89179ca1379954b82f23cb0dbc pretty-1.1.3.6:c92ac79323e26400a49f7d4a05f3177b process-1.6.13.2:d8142532fe09775f94825a7122f6cd66 rts-1.0.1: stm-2.5.0.1:38f5f695ace87ac7cc9de1da9a924ec2 template-haskell-2.16.0.0:4941fe1f7363fb0afdb0e1b147e8aca5 terminfo-0.4.1.4:1a507f657c3f50034ccb5a2a94bbb401 text-1.2.4.1:6a373ace8870d52a4e54b195189df9af time-1.9.3:3aaed41686a85275c46cf4501b593b8a transformers-0.5.6.2:b73c9cb722a768b9145a2c3d5591a225 unix-2.7.2.2:2e5d3292d05683cbaa7ef95d1a5f158c xhtml-3000.2.2.1:be8c6974cd731ef678793d3e44c7ca60[0m
[0;31mGot:      Cabal-3.2.1.0:13893203e3eec7f4e06ed8264d53ce36 array-0.5.4.0:84daffa90f3ca103cdf9f63b2e3dc42b base-4.14.3.0:87b3b0c5158079c42ae6b245bc931ed6 binary-0.8.8.0:e62e03d2b43d75f2961c02cb6b402737 bytestring-0.10.12.0:6f2aed7f354af02db1f34ddfd14594ee containers-0.6.5.1:f6a92e5d06a39627f4d849cd8046c0e7 deepseq-1.4.4.0:a521405ea2fb9cce775751ee169e6ef9 directory-1.3.6.0:0491e2b3e32242cb6c06688e9c6be0e4 exceptions-0.10.4:ce3e15c9ecb7c913c26e3d6fdf3be66e filepath-1.4.2.1:eff0de9acad3e94ecfae52309ec1d282 ghc-8.10.7:c712124be98090e22f04e441db18d011 ghc-boot-8.10.7:05969f5326bb9e37dc11361437706d9b ghc-boot-th-8.10.7:791b63caa8da80a80012db3b6e58055a ghc-compact-0.1.0.0:8adf73318a141525e030105b243fc1e4 ghc-heap-8.10.7:2804610a013fc492b7a5cd5f4cacc218 ghc-prim-0.6.1:0de0fc5f97fc1327fa41d908bc0fa855 ghci-8.10.7:634a2e7c4fab9b3ee3084b289675b14e haskeline-0.8.2:d7fd4f62a2c7e73f1a18d031688a46db hpc-0.6.1.0:564959df2eff2f2d904aeb5475adb4ec integer-gmp-1.0.3.0:bb2d3eb35c9ec3512ba0dc3a025970db libiserv-8.10.7:a97f6b549f5162fd72bd80f444ad4f07 mtl-2.2.2:3017f49a70971fbc4297d718565e8ee7 parsec-3.1.14.0:53a9bc89179ca1379954b82f23cb0dbc pretty-1.1.3.6:c92ac79323e26400a49f7d4a05f3177b process-1.6.13.2:d8142532fe09775f94825a7122f6cd66 rts-1.0.1: stm-2.5.0.1:38f5f695ace87ac7cc9de1da9a924ec2 template-haskell-2.16.0.0:4941fe1f7363fb0afdb0e1b147e8aca5 terminfo-0.4.1.4:1a507f657c3f50034ccb5a2a94bbb401 text-1.2.4.1:6a373ace8870d52a4e54b195189df9af time-1.9.3:3aaed41686a85275c46cf4501b593b8a transformers-0.5.6.2:b73c9cb722a768b9145a2c3d5591a225 unix-2.7.2.2:2e5d3292d05683cbaa7ef95d1a5f158c xhtml-3000.2.2.1:be8c6974cd731ef678793d3e44c7ca60[0m
[Error - 11:28:24 AM] Connection to server got closed. Server will not be restarted.

環境は
• Windows 11 から WSL の Ubuntu にリモート接続した VS Code
◦ Windows 11 21H2
◦ Ubuntu 20.04.4
◦ VS Code 1.67.2
• direnv で nix を有効にしてるのが VS Code に反映されてるんだろうか
◦ Nix 2.3.15
... Replies ...
Hiromi ISHII / mr_konn
GHC ABIs don't match![0m

とあるので、バイナリが食い違ってそうですね。8.10.7 で起き得るのかちょっと微妙なところですが、HLS がビルドされている GHC と、WSL内で使われている GHC のバイナリが違うものになっているということだと思います。
@toyboot4e has joined the channel
@fet has joined the channel
github action で CI を回しているんですが、GHC 9.0 や 9.2 って使えてますか? ubuntu-latest だと apt-get が失敗するようです。
... Replies ...
ある型クラス(Heap)をラップする型を定義して、それ自体も型クラスのインスタンスにしたいのですが、コンパイルエラーになってしまって悩んでいます。解決策や別実装のアプローチがあればおしえていただきたいです(詳細をスレに書きます)
... Replies ...
@shinya sakae has joined the channel
@ has joined the channel
@hirofumikubo has joined the channel
foldr と foldl で結果が異なるような場合ってありますか?
... Replies ...
@Nakamin7 has joined the channel
@osada has joined the channel
@ has joined the channel
あびしゃい後円墳
@あびしゃい後円墳 has joined the channel
Hiromasa Sakata
@Hiromasa Sakata has joined the channel
@Smearble has joined the channel
@尾﨑嘉彦 has joined the channel
このツイートに書いたことなんですが、例えば
foo :: a -> IO ()

という foo があって、デバッグのために foo の中で
Debug.Trace.traceIO $ show a

をしたいとき、正攻法だと Show a 制約を付けて回るところを型をいじらずに済ます邪法はありますか?
Show a が存在しないケースでは実行時エラーで構いません
... Replies ...
@有田翔梧 has joined the channel
はじめまして!Haskellの初心者です。
cabalで「BiGUL」というパッケージをインストールしたかったのですが、どうしてもうまく行かなったので質問させていただきます。
`cabal install BiGUL --allow-newer=base`でエラーが出てきました。
GHCupを使っています。cabalはversion3.6.2.0です。
ビルドログは以下のように
$ cabal install BiGUL --allow-newer=base
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
- BiGUL-1.0.1 (lib) (requires build)
Starting BiGUL-1.0.1 (lib)
Building BiGUL-1.0.1 (lib)

Failed to build BiGUL-1.0.1.
Build log (
C:\cabal\logs\ghc-8.10.7\BiGUL-1.0.1-7201c71d54996439f3e7433c7d9e8e8c75b69faa.log
):
Preprocessing library for BiGUL-1.0.1..
Building library for BiGUL-1.0.1..
[ 1 of 10] Compiling GHC.InOut ( src\GHC\InOut.hs, dist\build\GHC\InOut.o )
[ 2 of 10] Compiling Generics.BiGUL ( src\Generics\BiGUL.hs, dist\build\Generics\BiGUL.o )
[ 3 of 10] Compiling Generics.BiGUL.Error ( src\Generics\BiGUL\Error.hs, dist\build\Generics\BiGUL\Error.o )
[ 4 of 10] Compiling Generics.BiGUL.PatternMatching ( src\Generics\BiGUL\PatternMatching.hs, dist\build\Generics\BiGUL\PatternMatching.o )
[ 5 of 10] Compiling Generics.BiGUL.Interpreter.Unsafe ( src\Generics\BiGUL\Interpreter\Unsafe.hs, dist\build\Generics\BiGUL\Interpreter\Unsafe.o )
[ 6 of 10] Compiling Generics.BiGUL.Interpreter ( src\Generics\BiGUL\Interpreter.hs, dist\build\Generics\BiGUL\Interpreter.o )
[ 7 of 10] Compiling ( src\Generics\BiGUL\TH.hs, dist\build\Generics\BiGUL\TH.o )

src\Generics\BiGUL\TH.hs:144:16: error:
? Couldn't match expected type ▒e(Type -> TySynEqn) -> Dec▒f
with actual type ▒eDec▒f
? The function ▒eTySynInstD▒f is applied to two arguments,
but its type ▒eTySynEqn -> Dec▒f has only one
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
In the fourth argument of ▒eInstanceD▒f, namely
▒e[TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList))),
FunD vFrom fromClauses, FunD vTo toClauses]▒f
|
144 | [TySynInstD nRep
| ^^^^^^^^^^^^^^^...

src\Generics\BiGUL\TH.hs:144:27: error:
? Couldn't match expected type ▒eTySynEqn▒f with actual type ▒eName▒f
? In the first argument of ▒eTySynInstD▒f, namely ▒enRep▒f
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
In the fourth argument of ▒eInstanceD▒f, namely
▒e[TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList))),
FunD vFrom fromClauses, FunD vTo toClauses]▒f
|
144 | [TySynInstD nRep
| ^^^^

src\Generics\BiGUL\TH.hs:146:21: error:
? Couldn't match expected type ▒eMaybe [TyVarBndr]▒f
with actual type ▒e[Type]▒f
? In the first argument of ▒eTySynEqn▒f, namely
▒e[generateTypeVarsType name typeVars]▒f
In the second argument of ▒eTySynInstD▒f, namely
▒e(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))▒f
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
|
146 | [generateTypeVarsType name typeVars]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src\Generics\BiGUL\TH.hs:556:53: error:
? Couldn't match expected type ▒eExp▒f with actual type ▒eMaybe Exp▒f
? In the first argument of ▒emkBodyExpForRearr▒f, namely ▒ee▒f
In the expression: mkBodyExpForRearr e
In an equation for ▒emkBodyExpForRearr▒f:
mkBodyExpForRearr (TupE [e]) = mkBodyExpForRearr e
|
556 | mkBodyExpForRearr (TupE [e]) = mkBodyExpForRearr e
| ^

src\Generics\BiGUL\TH.hs:558:29: error:
? Couldn't match expected type ▒eExp▒f with actual type ▒eMaybe Exp▒f
? In the first argument of ▒emkBodyExpForRearr▒f, namely ▒ee▒f
In a stmt of a 'do' block: lexp <- mkBodyExpForRearr e
In the expression:
do lexp <- mkBodyExpForRearr e
rexp <- mkBodyExpForRearr (TupE es)
(_, [eprod]) <- lookupNames astNamespace [] ["EProd"]
return ((ConE eprod `AppE` lexp) `AppE` rexp)
|
558 | lexp <- mkBodyExpForRearr e
| ^

src\Generics\BiGUL\TH.hs:583:46: error:
? Couldn't match type ▒eMaybe Exp▒f with ▒eExp▒f
Expected type: [Exp]
Actual type: [Maybe Exp]
? In the second argument of ▒econcatMap▒f, namely ▒ees▒f
In the expression: concatMap getAllVars es
In an equation for ▒egetAllVars▒f:
getAllVars (TupE es) = concatMap getAllVars es
|
583 | getAllVars (TupE es) = concatMap getAllVars es
| ^^

src\Generics\BiGUL\TH.hs:649:16: error:
? Couldn't match type ▒eExp▒f with ▒eMaybe Exp▒f
Expected type: [Maybe Exp]
Actual type: [Exp]
? In the first argument of ▒eTupE▒f, namely ▒ees▒f
In the first argument of ▒ereturn▒f, namely ▒e(TupE es)▒f
In a stmt of a 'do' block: return (TupE es)
|
649 | return (TupE es)
| ^^
cabal-3.6.2.0.exe: Failed to build BiGUL-1.0.1. See the build log above for
details.
... Replies ...
@ has left the channel
@ has joined the channel
haskell/text-icu にカスタム照合規則対応を追加する PR を送ってみたのですが、これで正しいのか今一自信がありません。どなたかご助言下さいますと助かります:bow:

気になっていること
• FFI 周りの作法は正しいか
• 露出する API は適切か
collatorFromRulesWithrules の命名
rules を Data.Text.ICU で再エクスポートしないこと(何の rules なのか名前から分からないと思うので再エクスポートしませんでした)
• テスト方法
https://github.com/haskell/text-icu/pull/76
の練習問題3.2の証明をで書こうとして絶賛はまり中。
というか、エラーメッセージが理解できないでいます。`Could no deduce: If (x == x) t ('Var x) ~ t` なぜなんでしょう?
```src/Gmachine/AExprLet.hs:245:24: error:
• Could not deduce: If (x == x) t ('Var x) ~ t
from the context: s ~ 'Var x1
bound by a pattern with constructor:
SVar :: forall (x :: Name). Sing x -> Sing ('Var x),
in a case alternative
at src/Gmachine/AExprLet.hs:244:5-11
or from: x1 ~ x
bound by a pattern with constructor:
Refl :: forall {k} (a :: k). a :~: a,
in a case alternative
at src/Gmachine/AExprLet.hs:245:16-19
Expected: Sing (Substitute s x t)
Actual: Sing t
't' is a rigid type variable bound by
the type signature for:
saSubstitute :: forall (s :: AExpr) (x :: Name) (t :: AExpr).
Sing s -> Sing x -> Sing t -> Sing (Substitute s x t)
at src/Gmachine/AExprLet.hs:239:1-101
• In the expression: st
In a case alternative: Proved Refl -> st
In the expression:
case sx %~ sy of
Proved Refl -> st
Disproved _ -> ss
• Relevant bindings include
st :: Sing t (bound at src/Gmachine/AExprLet.hs:240:20)
sx :: Sing x (bound at src/Gmachine/AExprLet.hs:240:17)
saSubstitute :: Sing s
-> Sing x -> Sing t -> Sing (Substitute s x t)
(bound at src/Gmachine/AExprLet.hs:240:1)
|
245 | Proved Refl -> st
| ^^```
... Replies ...
再帰的な型をキーとする要素数の少ないMapに対して頻繁にlookupをかけるコードを書いており、高速化したいです。はじめはHashMapを使おうと思っていたのですが、hashWithSaltをプリミティブな演算のみで実装しても再帰のオーバーヘッドが大きかったのか、かえって遅くなってしまいました
... Replies ...
すみません。
Data.Array.Unboxedの使い方で分からないことがあってteratailに質問しているのですが、回答が付かないので何かわかるかたがおられましたらアドバイス頂きたく。
https://teratail.com/questions/r7tsy92f3nildu
... Replies ...
通常ならteratailの質問はRSS経由で questions-feed-jp に流れるはずなんですが、止まっちゃってるっぽいですね... ちょっと誰か調べてくれませんか?体調不良で、パソコン版Slackを開くのが億劫な状況です。
と思ったらどちらにしても今teratail不調みたいですね :cold_sweat: 焦っても今できることはなさそう
https://twitter.com/teratail/status/1554028954524467201?s=20&t=ZpIIpArd1UoWC81-GinPKg
@ has joined the channel
@宇高大志 has joined the channel
@def has joined the channel
@ has joined the channel
kenji takahashi
@kenji takahashi has joined the channel
@asaotani has joined the channel