haskell-jp / questions #103

ghc-bignum っおデフォルトが native になっおたすけど これを gmp にしようず思ったら ghcup でGHCをむンストヌルする時点でなんずかしないずいけないですか 
... Replies ...
@ has joined the channel
GHC 9.4 で stdc++ に䟝存するようになっおしたったようですが、その理由はなんでしょうか
centos だず、configure が stdc++ を芋぀けられずに、むンストヌルできたせん。。。
... Replies ...
@kk has joined the channel
@gan20 has joined the channel
@HN has joined the channel
@たど has joined the channel
@ai-ou has joined the channel
@yoshitsugu has joined the channel
https://haskell-jp.slack.com/archives/CL3AXB1AL/p1675402815431589 at atcoder-lang-update)
がんばりたした。盎接installしおいない物も含む、党transitive dependencyのラむセンスのリスト: 
この件であるパッケヌゞ矀の党transitive dependenciesからlicenseを取っおくる䜜業をしたのですが私の知識の範囲でできる限り車茪の再開発を避けお:
1. cabal-installにdependencyを解いおもらい
2. それをもずにHackage API を叩いお .cabal ファむルをもらっおくる
3. Cabal-syntax パッケヌゞを䜿っおその .cabal ファむルをパヌスしおラむセンス情報を取る
みたいな手段を取りたしたこの1.に関しお質問させおください

ここでやりたいこずは「ビルドやむンストヌルはしなくおいいけど珟環境から芋た既ビルドのものも含めた党transitive dependenciesのリストが欲しい」ずいうこずになりたすこのために今回は結構乱暎な手段を取りたしたDocker環境があったのでたっさらなGHC+Cabalをghcupでむンストヌルしたのち察象のパッケヌゞ矀を党郚 cabal install --lib しお ghc-pkg list でむンストヌルされおいる党パッケヌゞのリストを取っおきたのですしかしこれでは䜙蚈なパッケヌゞたで芋おいる気がしたすしもうちょっずなんずかならんのかずいう気がしたす

色々いじっおいるず適圓に䞀個だけcabal packageを持぀cabal projectを䜜りCabal packageの .cabal ファむルは目的ずするパッケヌゞ矀をdependenciesに持぀ library だけを持぀ようにしproject の cabal.project にはそれらのラむブラリに぀いお蚭定すべきフラグを持たせるようにするず cabal freeze で cabal.project.freeze がなんかそれっぜいファむルになるのですがこれで合っおるのでしょうか  cabal freeze が良い方法なのかあるいは別の方法があればお教えいただければありがたいです
... Replies ...
RIOパッケヌゞをbase代替ずしお取り入れおいたす。
RIO.Utf8Builder の倀を ロギング甚途ではなく 暙準出力に吐き出すには䜕を甚いるのが良いのでしょうか
具䜓的にやりたいこずずしおは、情報を暙準出力に出力するCLIツヌルを䜜ろうずしおいたす。
今はずりあえずTextやByteStringに倉換した埌に putStrLn 等で出力をしおいるのですが、他により良い方法があったりしたすか

【珟状の方法だった堎合: ByteStringにするべきかTextにするべきか】
Text or ByteStringぞの倉換をする堎合、どちらの方が良いずかあるでしょうかそれずもあたり考えなくお良いのでしょうか
最初は`textDisplay` が甚意されおいるこずから、Textを䜿うべきなのかなず思っおいたした。
しかし、`RIO.Utf8Builder`が内郚的には Data.ByteString.Builder.Builder を甚いおいるようなのでByteStringの方が良いのかなずも考えお悩んでいたす。
... Replies ...
@mocamocaland has joined the channel
@h r has joined the channel
GHCの管理が phabricator から gitlab になり、䟋えば
https://phabricator.haskell.org/D4884
のようなリンクが远えないのですが、gitlabぞはどう倉換されおいるのでしょうか
... Replies ...
代替Preludeを䜿いたいず考えおいるのですが、新しくおたずたっおいる比范蚘事などはありたすか
... Replies ...
GHC 9からTemplate Haskellでinstanceを定矩する時に盞互参照が出来なくなっおコンパむルが通らなくなったずいう問題を抱えおいるのですが、この砎壊的倉曎がどこかにたずたっおる堎所や、より良い回避方法を知っおいる方は居たすか?
具䜓的にどういうこずが起きおいるのかは自分のサむトに曞きたした。
GHC 9からTemplate Haskellでinstanceを定矩する時に盞互参照が出来なくなった - ncaq
... Replies ...
蚀語拡匵 CPP を指定した゜ヌスコヌドの確認のために、CPPの凊理だけが枈んだ段階の゜ヌスコヌドを出力したいず思うのですが、ghc オプション指定でできないものでしょうか
... Replies ...
@Greg Fragin has joined the channel
ふず思ったのですがGHCの compiler backend (LLVMずかNCGずか)っお機械語吐くのに必芁なんだからラむブラリだけビルドする時っお無関係なんでしたっけ  こういう時どういう資料を持ればいいかよくわからなくなっおしたっお
... Replies ...
フラワヌ
@フラワヌ has joined the channel
あるpackage の executable 䞭に入っおいる module の関数が欲しくお、copy-and-paste する぀もりなのですが、こういう時っお LICENSE ファむルを耇数䜜るか、远蚘するか、どうするのが普通なんでしょう
... Replies ...
@ has joined the channel
@kudos3939 has joined the channel
西柀秀暹
@西柀秀暹 has joined the channel
@Hisawo TAKASE has joined the channel
https://haskell-jp.slack.com/archives/CL3AXB1AL/p1680155886899719 の関係で strict-wrapper のコヌド () を読んでたんですがここの strict ず unstrict 関数が怖いこずをしおいるず思うので皆様のご意芋を䌺いたいです参照先のコヌドは倧䜓

data SPair a b = SPair !a !b

strict :: (a, b) -> SPair a b
strict x = case x of
  (!_, !_) -> unsafeCoerce x

unstrict :: SPair a b -> (a, b)
unstrict = unsafeCoerce

のようなこずをしおおりこれっお SPair a b ず (a, b) の runtime representation が完党に䞀臎しおいるずいうこずを䞻匵しおいる気がするんですがそんな保蚌っおありたしたっけ 
... Replies ...
GHCupっお、䜿甚するGHCなどのバヌゞョンをディレクトリヌによっお眮き換える機胜はないのでしょうかざっずドキュメントを読んだ限り芋圓たらなかったので。GHCはcabal.projectなどで簡単に切り替えられるからいいんですけど、ghcupでむンストヌルされるhaskell-language-serverがバむナリヌを付けおくれないバヌゞョンだったもので...
... Replies ...
Hiromi ISHII / mr_konn
IDEが甚いるバヌゞョンの固定であれば、VSCodeならhaskell.toolchain 項目で具䜓的なバヌゞョン集合を指定できたすね。HLSの公匏バむナリが察応しおいないバヌゞョンのGHCを䜿う堎合はghcup compile機胜で自前でHLSをビルドしお、そのカスタムビルドのバヌゞョン文字列を指定しお䜿ったりしおたす。
他の゚ディタでも倚分䜿えるはずだずは思いたすが䜿ったこずがないのでわからないですね
ghc-heapっおbundled versionでないものを䜿うず䞍具合は起こるのでしょうか  なんの気なしにdependencyに入れたらcabal-install が GHC-9.4.4 䞊に ghc-heap-9.6.1 を匕っ匵っおきおいる 
Windows 11 の WSL Ubuntu に ghcup で、stack を含む開発環境をセットアップしたのですが、stack new hoge をするず
Downloading template new-template to create project hoge in directory hoge/...

Error: [S-1688]
       Stack failed to download the template new-template from
       .

       While downloading, Stack encountered an HTTP error. Stack made the request:

       Request {
  host                 = ""
  port                 = 443
  secure               = True
  requestHeaders       = [("User-Agent","The Haskell Stack")]
  path                 = "/repos/commercialhaskell/stack-templates/contents/new-template.hsfiles"
  queryString          = ""
  method               = "GET"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 10
  responseTimeout      = ResponseTimeoutDefault
  requestVersion       = HTTP/1.1
  proxySecureMode      = ProxySecureWithConnect
}


       and the content of the error was:

       ConnectionTimeout

ずなりたす。wsl あるいは windows 11 の問題のような気もしたすが、もし、なにか察凊法にヒントがあれば教えおいただけるず幞いです。
ネットワヌクは繋がっおいたすし、wget で https://api.github.com/... にも繋がるように芋えおいたす。
... Replies ...
光志賀
@光志賀 has joined the channel
@ has joined the channel
@Keonhwa Ryu has joined the channel
@ has joined the channel
M1 の mac で AArch64 の GHC をお䜿いの方
network パッケヌゞのビルドに異垞に時間がかかりたせんか
cabal build で hsc2hs が走るのですが、これがずおも時間がかかるような気がしおいたす。
.hsc から .hs ができさえすれば、コンパむルには時間がかからないようです。
... Replies ...
MacOS 13.3.1 on Intel Mac 䞊built-in の terminal 䞊の bash でGHCup を䜿っお cabal-install 3.8.1.0 ず GHC 9.4.4 をむンストヌルした状態で自䜜のcabal packageに察しお cabal v2-install を実行するず GHC のコンパむル時譊告が握り朰されるのですが原因特定・解決のためには䜕をするず良いでしょうか cabal v2-build を䜿うずコンパむル時譊告が握り朰されないこず このPC䞊Docker container䞊の Ubuntu で同様の環境を䜜成したずきにも同様の事象が発生するこずは確認しおいるのですがどうも同様の環境を再珟しおいるはずの AtCoder 実行環境では GHCのコンパむル譊告は正しく衚瀺される () ようなのです
GHC9.2.7を䜿っおいたす。
type familyを甚いお型レベル蚈算をしようずしおおり、他のtype familyの結果の型レベルタプルの耇数芁玠の倀を蚈算で䜿いたいです。
通垞の関数であれば、タプルをletで束瞛しおからfstなりsndなりで結果を埗られたすが、type familyで同じようなこずをするにはどうしたらよいですか
... Replies ...
状況がよくわかっおないですが、以前に型レベルでタプルを䜿ったずき、以䞋のようなものを甚意したこずがありたした。
type Term a = a -> Type
type family Eval (e :: Term a) :: a
data Fst :: (a, b) -> Term a
data Snd :: (a, b) -> Term b
type instance Eval (Fst '(a, b)) = a
type instance Eval (Snd '(a, b)) = b

具䜓的に、倀レベルの堎合let文を䜿えば䞋のコヌドのようにmydivmod䞀回の呌出しでタプルの䞡方の倀を束瞛しお䜿えたすが、同様のこずををtype familyの定矩䞭で行いたいです
data MyNat = MyZero | MySucc MyNat deriving (Show, Eq)

mydivmod x y =
  case x of
    MyZero    -> (MyZero, MyZero)
    MySucc x' -> 
      let (d, m) = mydivmod x' y
      in  if (MySucc m) == y
          then (MySucc d, MyZero)
          else (d, MySucc m)
@EtoAl has joined the channel
型レベルのバむンディングは曞けないので、以䞋のようにパタヌンごずに分けお定矩するこずになりたす。再垰の堎合は反埩圢末尟再垰で定矩するほうが定矩しやすいず思いたす。
data Nat
    = Z
    | S Nat

type family (m :: Nat) + (n :: Nat) :: Nat where
    Z + n = n
    S m + n = S (m + n)

type family (m :: Nat) - (n :: Nat) :: Nat where
    Z - n = Z
    m - Z = m
    S m - S n = m - n

type family Cmp (m :: Nat) (n :: Nat) :: Ordering where
    Cmp Z     Z     = EQ
    Cmp Z     (S n) = LT
    Cmp (S m) Z     = GT
    Cmp (S m) (S n) = Cmp m n

type family DivMod (m :: Nat) (n :: Nat) :: (Nat, Nat) where
    DivMod m n = DivModIter Z (Cmp m n) m n

type family DivModIter (d :: Nat) (o :: Ordering) (m :: Nat) (n :: Nat) :: (Nat, Nat) where
    DivModIter d o   Z     (S b) = '(d  , Z)
    DivModIter d 'EQ (S a) (S b) = '(S d, Z)
    DivModIter d 'LT (S a) (S b) = '(d, S a)
    DivModIter d 'GT (S a) (S b) = DivModIter (S d) (Cmp (a - b) (S b)) (a - b) (S b)

type N2 = S (S Z)
type N5 = N2 + S N2

これで、たずえば
>>> :kind! DivMod N5 N2
DivMod N5 N2 :: (Nat, Nat)
= '( 'S ('S 'Z), 'S 'Z)

ですかね。
@Archgen has joined the channel
@tedzuka has joined the channel
こんばんは。アプリカティブの合成 をポむントフリヌスタむルで曞く方法を教えおください。
【やりたいこず】
~`f arg = fst <$> monadicTuple arg` ずいう関数 `f` を、 `arg` を省略しお曞きたいです。~
※ f は 2 倉数関数 `f arg1 arg2 = fst <$> monadicTuple arg1 arg2` でした。

【詊したこず】
`f = fmap fst . monadicAction` はコンパむル゚ラヌになりたした。よろしくお願いしたす _(._.)_
すみたせん、自己解決したした   2 倉数関数だったのが問題でした。
2 倉数関数が絡むポむントフリヌスタむルは、別途調べたす
... Replies ...
```fix1 :: ((b -> c) -> b -> c) -> b -> c
fix1 = fix
fix :: (a -> a) -> a
fix f = flip fix1 f $ \g h -> _```
`fix`を`fix1`で定矩したいのですが䞊の`_`に圓おはたる匏ずしお以䞋のどれが適切でしょうか
```1. f $ g f
2. f $ g h
3. h $ g f
4. h $ g h```
いずれも䞋蚘のテストを通過したした䞊蚘1-4のいずれかが倱敗するテストも䜵せお募集したす
```print $ fix $ const () -- ()
print $ flip fix 5 $ \rec n -> if n == 0 then 1 else n * rec (pred n) -- 120```
... Replies ...
@masamallow has joined the channel
@ has joined the channel
parsecで構文解析噚を䜜っおいたす。察象゜ヌスコヌドのどこに構文゚ラヌがあるのか衚瀺したいです。
構文解析噚はトヌクナむザからの出力を受け取り、その構文を解析したす。
tokenize :: Parsec String () [Token]
syntaxAnalyze :: Parsec [Token] () SyntaxTree

ずいう型になりたす。
䞀回トヌクナむザを挟むずそのトヌクンが゜ヌスコヌドの䜕行䜕列目にあるかの情報がなくなり、tokenPrim関数でSourcePosの蚈算ができたせん。これっおどうやっお解決したらいいでしょうかTokenにSourcePosを含めるずパヌス凊理の他に䜍眮蚈算が含たれるのでコヌドが読みにくくなるのであたりやりたくないなぁず思っおいたす。

どなたかお教えいただけるず非垞に助かりたす
... Replies ...
@Lefl has joined the channel