haskell-jp / beginners #19

Endo Ryunosuke / minerva
Bifunctor って第一引数を固定すると Functor になると思うんですが,そういうインスタンス定義は提供されてないみたいなので,
instance Bifunctor f => Functor (f a) where
  fmap = second

と書いてみるとこれはコンパイル通りません.エラーメッセージは
[1 of 1] Compiling Main             ( adv.hs, interpreted )

adv.hs:70:25: error:
    • Illegal instance declaration for 'Functor (f a)'
        (All instance types must be of the form (T a1 ... an)
         where a1 ... an are *distinct type variables*,
         and each type variable appears at most once in the instance head.
         Use FlexibleInstances if you want to disable this.)
    • In the instance declaration for 'Functor (f a)'
   |
70 | instance Bifunctor f => Functor (f a) where
   |                         ^^^^^^^^^^^^^
Failed, no modules loaded.

で,指示通り {-# LANGUAGE FlexibleInstances #-} をつけるとコンパイルは通りますが,デフォルトだとなんでこんな制約があるんでしょう?
... Replies ...
質問失礼します.
RPELで
hoge 0 = 0
hoge 1 = 1
hoge x = hoge (x-1) + hoge (x-2)

を定義する方法はありますか?caseを使うしかないのでしょうか?
このように定義すると,単に関数の定義を上書きしているとみなされてしまいます.
... Replies ...
質問連投すみません.
こちらをMain.hsに入力しました:
hoge 0 = 0
hoge 1 = 1
hoge x = hoge (x-1) + hoge (x-2)

REPLを起動してロードしても,定義されていないことになっており,行き詰まってしまいました...
Resolving dependencies...
Build profile: -w ghc-8.10.4 -O1
In order, the following will be built (use -v for more details):
 - fake-package-0 (lib) (first run)
Configuring library for fake-package-0..
Preprocessing library for fake-package-0..
Warning: No exposed modules
GHCi, version 8.10.4:   :? for help
Loaded GHCi configuration from /var/folders/xq/fpvgsjwd3ms24_w3lwl_4d780000gn/T/cabal-repl.-18964/setcwd.ghci
Prelude> :l Main
[1 of 1] Compiling Main             ( Main.hs, interpreted )
Ok, one module loaded.
Prelude> hoge 5

<interactive>:2:1: error: Variable not in scope: hoge :: t0 -> t
Prelude> 

... Replies ...
@ose20 has joined the channel
Endo Ryunosuke / minerva
Calculate Polytypically! にある crush 演算子を Haskell で定義したい人です.本当は依存型のような仕組みを使って n-ary functor を扱いたかったのですが,よくわからなかったため,とりあえず論文にある例を動かすためには Bifunctor まで扱えればいいかなということで, を参考にしつつ書いてみました.たぶん動いてはいるんですが,これ以前に書いた Haskell のコードが Hutton 本 2 の演習問題くらいしかないので,Haskell らしい良い書き方というものがわからず,いまいち自信がもてません.ぱっと見で改善点があれば教えてほしいです.コードはスレッドにぶら下げておきます.
... Replies ...
@t-shibata has joined the channel
はじめまして
1年くらい前にすごいH本を買って読んで辞めてを数回繰り返してたくらいの知識です。
今度こそちゃんと勉強しようとまず環境をそろえているのですが、VSCodeのHaskellの拡張機能がインテリセンスをしてくれないです。。
初歩にすら立っていない質問で恐縮ですが、どなたかご教示いただけますと幸いです。
環境はubuntu18.04のPCにRemote Developerで接続しています。
haskellは良く調べずに初めにapt installで古いhaskellをインストールしてから拡張機能が動かないのでghcupでインストールした次第です。
何卒宜しくお願い致します。
... Replies ...
akira ishiguro
@akira ishiguro has joined the channel
@η has joined the channel
Endo Ryunosuke / minerva
別に質問じゃないんですが,Pearls of Functional Algorithm Design って超むずくないですか.最初の章からわからないことばかり.(比較対象として言うと,Programming in Haskell 2nd Edition は補遺を除いてわからないと思うことがほとんどありませんでした.身についたかは別として.)
flip (.) の名称として一番よく使われているものってなんでしょうか
... Replies ...
$ と`.`の使い分けのポイントはありますでしょうか?
以下のような例ではどちらの書き方も可能で結果も同じになります。
list :: [Int]
list = [1..3]
f :: Int
f = sum . map (+2) $ list
g :: Int
g = sum $ map (+2) list

haskellの拡張機能のインテリセンスも特に何もサジェストしてくれないので好みでいい感じなのでしょうか。
... Replies ...
@ has joined the channel
unsafePerformIO は禁断だとか型安全性を壊すとかヤバいとかいう話はよく見かけるのですが、実際に`unsafePerformIO` が使われる場面ってどんなのがあるのでしょうか
... Replies ...
@Kamijo has joined the channel
@tm has joined the channel
今日のAtCoder の AtCoder Beginner Contest 233で StateT (MaybeT (ST s)) モナドを使い、

lift . MaybeT . return :: Maybe a -> StateT (MaybeT (ST s)) a

を捻り出すのに割と時間を取られてしまったのですが、もうちょっと簡単な書き方ってありますか?
... Replies ...
Masaya Igarashi
@Masaya Igarashi has joined the channel
@fujishiro has joined the channel
@mochizuki has joined the channel
@S D has joined the channel
Shun Yαnαurα
@Shun Yαnαurα has joined the channel
NANASHINO Seito
@NANASHINO Seito has joined the channel
@ has joined the channel
Haskellで、MonadThrowのthrowMをhspecでテストするときにcatchしたいのですが、いうならばshouldcatchのような関数はありますか?
... Replies ...
いまLinux環境にHaskellのツール一式を導入したいとおもったら何を使うのがよさげですか
... Replies ...
@Tak has joined the channel
@ has joined the channel
質問失礼します
stack buildをしてもError encountered while unpacking GHC with
tar jxf /Users/basechange/.stack/programs/x86_64-osx/ghc-8.10.7.tar.bz2
run in /Users/basechange/.stack/programs/x86_64-osx/ghc-8.10.7.temp/
The following directories may now contain files, but won't be used by stack:
- /Users/basechange/.stack/programs/x86_64-osx/ghc-8.10.7.temp/
- /Users/basechange/.stack/programs/x86_64-osx/ghc-8.10.7/
というエラーが出てしまいました
次に何をしたら良いのか教えていただけないでしょうか?
... Replies ...
質問内容: stack と cabal のどちらを使う方が良いでしょうか?
迷っている理由: 読みたい本ではstackがお薦めされているのでこちらを使いたいが、M1 mac で無事に遂行できるか心配

初めまして。型システムや関数型言語に対する興味からHaskell に惹かれて入門中です。『Programming in Haskell』を読んだあと、次はより実践的なアプリを作ってみたく『Haskell入門』を読もうと思っています。Haskellのプロジェクト管理ツール?としてはstackとcabalが主流とのことですが、どっちを使えばよいでしょうか?『Haskell入門』でもstackを使っているのでこちらを使いたいのですが、私はM1 macを使用しており、現在のstackではArm版に対応していないので、Rosetta2の使用などで対応した時に途中で行き詰まってしまわないか心配です。また、どちらを使用するにしても、公式ドキュメントを見て学習する予定なので、ドキュメントのわかりやすさなどの観点からのアドバイスがあればそちらもお聞きしたいです。
... Replies ...
Haskellの型検査の仕組みについて勉強したいのですが、何か参考になる文献はありますか?
... Replies ...
Stack を使って初めてプログラムをビルド、実行したのですが、ターミナルの表示がうまくいきません。具体的には、『Programming in Haskell』にあった計算機のプログラム(を少し変えたもの)を使いました。このプログラムはうまくいけば電卓のインターフェースがターミナルに表示されてREPLのように振る舞うのですが、画像のようにパスワードを入力するようなモードになってしまい、プログラムの出力も、こちらからの入力も見えない状態になってしまいました。control + c で終了するとその間の入力および出力が保存されていることはわかります。原因をご存知の方がいれば教えていただけないでしょうか。
... Replies ...
stack installでcryptoniteのインストールをしたのですが
Could not load module ‘Crypto.Hash’
It is a member of the hidden package ‘cryptonite-0.29’.
Perhaps you need to add ‘cryptonite’ to the build-depends in your .cabal file.
Use -v (or :set -v in ghci) to see a list of the files searched for.
|
4 | import Crypto.Hash
と出てしまい、ロードできません
初歩的な質問で申し訳ないのですが次に何をすれば良いのか教えてもらえないでしょうか?
... Replies ...
@kenko has joined the channel
@毛糸 has joined the channel
@はけた has joined the channel
@ryotomi has joined the channel
ghciに`3 = 4`と入力してもエラーになりませんでしたが,`3`を評価させるとやはり`3`になります.`4` になると思ったのですが.GHCIは`3=4`をどのように処理したのでしょうか?
... Replies ...
@ has joined the channel
@ has joined the channel
@htlsne has joined the channel
ニコラスと申します。(だいぶ前にもくもく会に参加させていただきました。)
質問させていただきたいです。

グラフを描画したいのですが, stackを使っている時にはどのようにすればいいかお教えいただければ幸いに存じます。。(stack exec project-exeをした後にグラフの描画が出てくるようにしたいです。)
ネットをみたところ、gnuplot?を用いて描画しているのが主だったのですが、stackからどのようにgnuplotを使うか分からなくなってしまいました。
具体的には
https://yakituka.hateblo.jp/entry/2019/08/26/193907
のサイトにあるように、微分方程式を描画したいです。
Glossでできないかと調べたのですが、このようなグラフを描画をする時にGlossをどう使えばいいかわかりませんでした。
よろしくお願い申し上げます:woman-bowing:
... Replies ...
@soaring zen has joined the channel
@naokij has joined the channel
@Jaeyoung Lee has joined the channel
はじめまして。
以下のHLSのエラーについてご質問させてください。
[cradle] [E] Multi Cradle: No prefixes matched

ソースコードはこちらです。app/AST.hsを開くと発生します。
https://github.com/htlsne/misc/tree/arithmetic-expression/haskell/arithmetic_expression

HLSのバージョンは以下です。
haskell-language-server version: 1.5.1.0 (GHC: 8.10.7)

以下を試しましたが解決しませんでした。
1. gen-hie > hie.yamlを実行してhie.yamlを生成したのですが、 エラーは消えませんでした。(
2. hie.yamlにAST.hsを追加したところ、AST.hsのエラーは消えました。しかし今度はMain.hsで`[not found] [E] Could not find module 'AST'` というエラーが出ています。(
どのようにしたら解決できるでしょうか。また、そもそもモジュールの作り方はこれで合っているのでしょうか。
既出の質問のようなのですが、解決できなかったためご相談させてください。
... Replies ...
@田中達也 has joined the channel
Endo Ryunosuke / minerva
Haskell 周辺の stack なり cabal なり ghcup などといった連中がそれぞれ何なのか全くピンときてなくて,node.js や ruby 周辺のことならわかるので,できればその辺のツールを例に,それぞれどれとどれが大体対応してるのか,違いはなんなのか等を交えてざっくり教えていただけるとありがたいです
... Replies ...
@kakkun61 has joined the channel
@ has joined the channel