haskell-jp / beginners #26

@ has joined the channel
@川頭信之 has joined the channel
@ has joined the channel
@ has joined the channel
@T N has joined the channel
@ has joined the channel
たぬきうどん
@たぬきうどん has joined the channel
たぬきうどん
Array についての質問です。
10×10の行列が与えられ、(1,1)成分から右か下に向かって成分を足しながら進んでいくとき、(i,j)成分へ至る道のうち最も和が小さいものを求めるという問題があります。
この問題に対して以下のようなコードを書きました。
import Data.Array

main :: IO ()
main = do
    let m = listArray ((1,1),(10,10)) [i+j |i<-[1..10], j<-[1..10]]
    print $ minPath m ! (8,8)

minPath :: Array (Int,Int) Int -> Array (Int,Int) Int
minPath mat = listArray ((1,1),(10,10)) $ [ f i j | i<-[1..10], j<-[1..10]]
    where   f 1 1 = mat ! (1,1)
            f 1 j = mat ! (1,j) + minPath mat ! (1,j-1)
            f i 1 = mat ! (i,1) + minPath mat ! (i-1,1)
            f i j = if minPath mat ! (i-1,j) > minPath mat ! (i,j-1) 
                        then minPath mat ! (i,j-1) + mat ! (i,j) 
                        else minPath mat ! (i-1,j) + mat ! (i,j)

これをrunghcで実行すると私の環境 (CPU: Ryzen 5 3600, RAM: 16GB) では40秒程度かかります。
Arrayは要素へのアクセスがO(1)なので、リストのリストよりも要素へのアクセスが速いはずです。
この理解が正しければボトルネックとなっているのは要素へのアクセスではないと思うのですが、それではどこにこんなに時間がかかるのかわかりません。
1. なぜこんなに時間がかかるのでしょうか?
2. どのように改善すればよいのでしょうか?
... Replies ...
@漆崎英一 has joined the channel
@Masakai has joined the channel
@ has joined the channel
maki tsurumaki
@maki tsurumaki has joined the channel
maki tsurumaki
Haskellのドキュメントは何処にあるんですか?

haskell orgのDocumentationは資料集みたいな感じでしたし…
... Replies ...
@小林ほげ has joined the channel
@ has joined the channel
@econ econ has joined the channel
@ has joined the channel
@Takashi Suwa has joined the channel
Reminder: beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。 Haskell-Beginners ML や IRCの#haskell-beginners  や RedditのMonthly Hask Anythingのような位置づけを意図しています。 beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。 • それはくだらない質問だ → くだらない質問など無い • その質問は以前にもあった → 質問者はそんなこと知らない • Google検索せよ → 検索できないから質問している beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。 • : とは何のことですか。 • タプルとは何ですか。
@toshico has joined the channel
@ has joined the channel
@ has joined the channel
@karoyakani has joined the channel
@jijijji has joined the channel
@Zenon has joined the channel
@pqppq has joined the channel
Chestnut Forest
@Chestnut Forest has joined the channel
Reminder: beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。 Haskell-Beginners ML や IRCの#haskell-beginners  や RedditのMonthly Hask Anythingのような位置づけを意図しています。 beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。 • それはくだらない質問だ → くだらない質問など無い • その質問は以前にもあった → 質問者はそんなこと知らない • Google検索せよ → 検索できないから質問している beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。 • : とは何のことですか。 • タプルとは何ですか。
@Hiroshi has joined the channel
Kensuke Kaieda
@Kensuke Kaieda has joined the channel
Daichi Kinoshita
@Daichi Kinoshita has joined the channel
@Bora Savas has joined the channel
@ has joined the channel
@Vzorov Alex has joined the channel
@柳田尚輝 has joined the channel
@Educorreia932 has joined the channel
@ has joined the channel
Reminder: beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。 Haskell-Beginners ML や IRCの#haskell-beginners  や RedditのMonthly Hask Anythingのような位置づけを意図しています。 beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。 • それはくだらない質問だ → くだらない質問など無い • その質問は以前にもあった → 質問者はそんなこと知らない • Google検索せよ → 検索できないから質問している beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。 • : とは何のことですか。 • タプルとは何ですか。
@Yegor has joined the channel
shusaku sahashi
@shusaku sahashi has joined the channel
@ has joined the channel
@ has joined the channel
プログラミングHaskell 第2版以外に副読本って無いですか
これは6年前の版の本ですし、副読本に比較的新しい内容も記載されていれば嬉しいのですが…
... Replies ...
(これはもしかして第3版に乞うご期待…?)
Myxogastria0808
@Myxogastria0808 has joined the channel
Myxogastria0808
質問失礼します。
NixOSでHaskellの開発環境の構築をしようとして、つまずいています。
vscodeのHaskellの拡張機能を正常に動かすことができません。
ghcupを追加すれば良さそうなのですが、追加しようとすると` Package ‘ghcup-0.1.50.2’ in (中略しています) is marked as broken` となってしまい、ghcupを追加できません。
devShellを利用した環境でvscodeのhaskellの拡張機能が正常に動作する開発環境を構築したいです。
単にflake.nixに適当な依存を追加する方法、haskell.nixを利用する方法などいろいろあると思いますが、どのような方法でも教えていただけますと助かります。
(Nixのコミュニティに質問するべきなのかもしれないのですが、Haskellの知識が足りないのも原因の一つになっていそうなので、こちらで質問させていただきました。)

現状のflake.nixは以下のようになっています。
以下のflakeを配置したディレクトリで、`stack new sample`で`sample`プロジェクトを作成し、環境を構築する方法を試しました。
{
  description = "haskell-mytutorial";
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs =
    inputs:
    inputs.flake-utils.lib.eachDefaultSystem (
      system:
      let
        pkgs = inputs.nixpkgs.legacyPackages.${system};
      in
      {
        devShells.default = pkgs.mkShell {
          packages = with pkgs; [
            stack
            haskell-language-server
          ];
        };
      }
    );
}

Haskellの拡張機能が出力しているログ?は以下になります。
2025-08-16 15:55:50.8370000 [client] INFO Finding haskell-language-server
2025-08-16 15:55:50.8380000 [client] INFO Checking for ghcup installation
2025-08-16 15:55:50.8470000 [client] INFO probing for GHCup binary
2025-08-16 15:55:50.8560000 [client] WARN ghcup at /home/hello/.ghcup/bin/ghcup does not exist
... Replies ...
@Soma Nakamura has joined the channel
@Shinya Sakae has joined the channel