haskell-jp / beginners #18

@yuist has joined the channel
@HA has joined the channel
stack.yaml.lock に関する質問です。
stack.yaml を更新したのに、ビルドで stack.yaml.lock を更新するのを忘れて、またPRを出し直すことがたまにあります。
よって、CircleCIなどのCIツールでそれを抑止したいです。
今私が主に使っているのはCircleCIです。
例えばJavaScriptのパッケージマネージャのyarnには yarn install --frozen-lockfile というオプションがあり、lockファイルの更新が発生しようとするとエラーになってくれます。
これをCIのコマンドに追加していればCIで教えてくれるわけです。
stackにも似たような機能があればそれで問題ないので、一通り探したのですが見つかりませんでした。
stack --lock-file read-only build は本当にread onlyになるだけでlockファイルとの矛盾があっても関係ないようです。
どなたかこういった機能が存在するかご存知でしょうか?
もしくは、このミスを抑止する他の方法があればお聞きしたいです。
... Replies ...
@chansuke has joined the channel
お久しぶりです。
昔に質問したと思うのですが、覚えていないのと自力解決を臨んでみたもののうまくいかなかったので質問します。
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.hsstack runghc DP2.hs で走らせようとした時に生じたエラーメッセージです。

これに対し私は package.yamldependencies
Data を書き加えたのですが、全く同じエラーが出ます。
解決方法を求めます。お願いします。
... Replies ...
お久しぶりです。
昔に質問したと思うのですが、覚えていないのと自力解決を臨んでみたもののうまくいかなかったので質問します。
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.hsstack runghc DP2.hs で走らせようとした時に生じたエラーメッセージです。

これに対し私は package.yamldependencies
Data を書き加えたのですが、全く同じエラーが出ます。
解決方法を求めます。お願いします。
... Replies ...
@tuft has joined the channel
@山田k has joined the channel
@ has joined the channel
@mod_poppo <@UL1HFJATE> もしくは他の方でも構いません
「Haskellで戦う競技プログラミング」でプリミティブ型についての説明をされている部分があったのですがいまいちピンとこなかったので質問させてください。
以下第4章 P.33より抜粋
 ここでの「プリミティブ型」という言い方は便宜的なものです。GHC 的にはプリミティブ型と言った
ら GHC.Prim で定義されている unboxed 型のことでしょうが、ここでは「GHC の unboxed 型を
ラップした型」程度の意味です。
「GHC的にはプリミティブ型といったらGHC.Primで定義されているunboxed型」と「GHC の unboxed 型をラップした型」これらの文が理解できませんでした。
GHC.Primが何のモジュールなのかもHackage見ただけではイマイチ理解できないレベルです。ざっくりとでも構いません、以上の文を噛み砕いていただけると助かります
... Replies ...
@dhesusan has joined the channel
はじめまして!

環境構築について質問です。

m1チップのmacbookでvscodeを使ってhaskellを学習したいのですが、vscode上でhlsがうまく動いてくれません。以下のようなエラーメッセージが出ます。
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

としたのですが、依然としてエラーが出ます。

ちなみに今は、ghcupを使ってghc, cabal-install, hlsを入れています。(stackは入りませんでした。)
vscodeの拡張機能の設定でhlsのpathは`$HOME/.ghcup/` 以下のbinを指定しています。

どなたかm1チップのmacとvscodeで環境構築できた方がいたら構築方法をご教示いただけないでしょうか?

よろしくお願いします:man-bowing:
... Replies ...
VSCodeで
The Haskell server crashed 5 times in the last 3 minutes. The server will not be restarted.

というエラーが発生しました。
stack clean --full でキャッシュを掃除してVSCodeを再起動したのですが依然と同じエラーが出ます。
解決方法を募集したいです。
... Replies ...
となると多分デフォルトの値なんでしょうね。
VSCode使わないから正直これ以上どう調べるか分からないなぁ。どなたか使っている方助け船を! :pray:
こんにちは、Template Haskellを書いている最中に
Illegal variable name: Mail
というエラーが出てきて困っています。

エラーとしては
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
   | ^^...

現在、会社の日報のためにメール送信スクリプトを作成しようと考えています。jsonでデータの構造を書いておき、そのインスタンスをEDEでメールの定型文に読み込む方針で す。

対象となるコードはこちらになります。Template Haskell自体まだ概念に馴染めておらず、なかなか苦戦しております…
なにかおすすめの資料等あれば教えていただけるとありがたいです:writing_hand:

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)) []
      ]
... Replies ...
Template Haskellの [e| ... |] などについてもっと詳しく解説してる記事があれば誰補足してほしいです... :pray:
@igrep
すごく小さなスクリプトですが、とうとう完成できました!ありがとうございます!
stage restrictionで長い間手こずりましたが……

ここで質問があります。
1. 日本語を表示する際unicode-showを使っているが、“が追加されるのを回避する方法はあるか?(showの挙動なので回避できない?)
2. SMTPでメール送信をしたいと考えているが、その際のメールアカウントのパスワードはどのように保存するべきか?

1番に関しては、後々TUIにしようと考えているので大きな問題ではないですが、もし何か解決法があるならお伺いしたいです。
馬鹿な勘違いでした:persevere:

2番に関しては秘密鍵をコンパイル時に生成してコードに埋め込み、暗号化したパスワードをファイルに保存しようかと思っています。
これってセキュリティ的に問題があるんですかね?(使用するのは個人のパソコンなので問題ないのか?とも思っていますが……)
@kzhk has joined the channel
@12 teka has joined the channel
math に投げるか迷ったのですがこちらで。
Lensってありますよね、getterとsetterがあるという認識なのですが、これらの概念は、圏論的にはどのようなものとして説明されるのでしょうか?
もしよろしければ、お教えいただけると幸いです。
... Replies ...
@hdr12271 has joined the channel
@Dainslef has joined the channel
@taka has joined the channel
こんにちは、一つ質問をさせてください!
現在型安全に状態遷移を表現する方法について悩んでいます。

data State
  = Ready 'StateA -- 型の上で次の状態を指定すれば、型安全な状態遷移を実現できるのではないか
  | StateA [Text] 'StateB
  | StateB [Text] 'Finished
  | Finished [Text] '()

toStateA :: State -> Text -> State -- この型上で何かしらパターンマッチングをしないといけない?
toStateA (Ready 'StateA) text = -- 値でパターンマッチングをすることはできない
  StateA [text]

理解が足りず、実現する手がかりがありません……

型安全な状態遷移をするのに必要なことは
• 型に次の状態を入れ込む
• 関数のシグネチャで、特定の遷移先の情報を持っている型のみ引数に取るようにする
だと考えているのですが、どのように状態の型を定義すればいいか少々混乱しています。なにかお力添えいただけないでしょうか?
... Replies ...
@toson has joined the channel
Haskellのデータ型を機械的に処理して、
JavaでのUMLみたいなフィールドでの所持構造を簡単にグラフで表すツールはありますか?
importのグラフを生成するツールはかなり昔に書きましたが、
https://github.com/ncaq/haskell-import-graph
データ型のグラフを生成するツールは見つかりませんでした。
というか、Haskell Graph系のクエリで検索すると、グラフデータ構造の話題ばかり出てきて検索するのが困難だったりしました。

なんでこれが必要なのかと言うと、Haskellを読解しない人にもある程度のデータ構造の相互概念を説明するのに便利かなと思ったためです。
こんにちは、何度も質問してしまって大変恐縮なのですが、皆さんはどのようにしてここまでの知識を蓄えたのでしょうか?
私はまだ断片的かつとても狭い知識にとどまっています。
英語日本語問わず、なにか実用的なものを作るために必要な有機的知識を得るのに、有用な本等あれば教えていただきたいです。
具体的なレベル感としては、モナドを使うことはできる、だがモナド変換子の実用的な知識まではない(囲っている変換子の数liftする、ぐらい)
コードリーディングとかもしてみたいのですが、巷のものは抽象度が高すぎたり、高度な背景知識を必要とするものばかりで困っています…。

↑書いたあとに思い出しましたが、私はhaskell wiki等全く読み込んでいませんでした。
まずそこから勉強していこうと思います:persevere:
... Replies ...
@蛇渕晃永 has joined the channel
Hidekazu IWAKI
@Hidekazu IWAKI has joined the channel
@角田智活 has joined the channel
@jxv has joined the channel
@ has joined the channel
@たくや has joined the channel
@hiroyuking has joined the channel
@KoyaTofu has joined the channel
do記法に関して疑問があります。

・doを使用すべき場面
・doを使用しないようにすべき場面
・理想的なdo記法の頻度
について、皆様の感触を聞きたいです。

一般的な正解はないかもしれませんが、複数の意見を聞ければ手探りで考えてるよりは良いと思い書かせて頂きました。

ちなみに自分は自分で読むとき分かりやすいという理由で今バリバリdoを多用してます。(今書いてる約500行の.hsファイル中27個のdoがありました、これでも抑えた)
現在私は「doを多用しても問題ないんじゃないか」的な感覚ですが、上級者はdoを使用しないとかネット上で聞くので、気になってます。

ちなみに趣味の範囲で書いていて、誰かにコードを見せるとかは普段はない状況です。

深く使ってるという方でなくても、私はこう思ってるよー、的なので大歓迎ですので、できれば広く聞かせて頂ければありがたいと思っています。
... Replies ...
@ has joined the channel
@ has joined the channel
@mark haskell has joined the channel
@nekurai has joined the channel
最近Haskellでパフォーマンスチューニングすることがあって、
メモリ確保量が30GBとかになっててなんで…?
ってメモリのプロファイルをhpファイルで取って調べてたのですが、
グラフの種類別のを全てまとめて生成する方法はないですか?
型別とかモジュール別とか色々あって、それぞれ一つずつ実行していくのは面倒でした
そのパフォーマンス問題自体は親部分でText生成しすぎというものでしたが、次回のパフォーマンス調査のために、全てのグラフを一気に生成する方法があれば知りたいです
軽く調べた感じだと見つかりませんでした
@ひで has joined the channel
Reminder: beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners  や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している

beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
ghc-9.2.1 を試してみたいのですが、方法がわかりません。
誰か助けてください。
... Replies ...
@葉酸you3 has joined the channel
自分はC#を用いることが多いのですが、FFIを用いてHaskellの関数やユーザー定義のデータ型などをC#とやり取りするにはどのようにすればよいのでしょうか?
一応自分では調べてみたもののCの知識などを使うことが多くよくわからなかったので、できればそのあたりも教えてくださると大変助かります。
... Replies ...
(/=) に独自実装を与えられなくなる予定とのことですが、これって効率的には問題ないんですか? 等しくないと分かれば早く抜けられるケースもある気もしますが。
... Replies ...
再帰関数って再起しすぎると関数のスタックがオーバーフローしたりしないのでしょうか
... Replies ...
Endo Ryunosuke / minerva
@Endo Ryunosuke / minerva has joined the channel