haskell-jp / questions #99

@hiroyuking has joined the channel
@KoyaTofu has joined the channel
はじめまして、Haskell初心者で、さらにSlackを使うのも初めてでして、投稿方法など間違っていましたらすみません。
とても簡単な質問かもしれないのですが、
「行列の第 i, j 成分のみ関数 f を適用する」
という関数
matrixsubst :: ( a -> a ) -> [[a]] -> [Int] -> [[a]]
matrixsubst f m [i, j] =
を作りたいのですが、どうしたらよいでしょうか。

具体例としましては、
f = (\x -> x^2),
m=
[[1,2,3]
,[4,5,6]
,[7,8,9]]
i= 2, j=3
とすると、出力として
[[1,2,3]
,[4,5,36]
,[7,8,9]]
を得たい、ということです。
... Replies ...
既出かもしれませんが
Haskellでパターンマッチを実行するとき想定外のパターンはエラー(コンパイルエラーか実行時エラー)にしたりすることはできるのでしょうか?
よくパターンマッチを使うと以下のような警告が出るのですが、そもそもありえないパターンが入ってたりするのです。
Warning: Pattern match(es) are non-exhaustive
... Replies ...
@ has joined the channel
あまり経験がなかったので気になったのですが、newtypeで宣言できる型をdataで宣言するユースケースって何があるでしょうか?
... Replies ...
GHC 9.2 でライブラリをコンパイルすると、Word8 (#付きかも)で問題が出ることが多いんですが、これは何が変更されたためですか?
... Replies ...
@mark haskell has joined the channel
@nekurai has joined the channel
GHC 9.0 の GHC API を使うと

Left :: a %1 -> Either a b

のように %1 が出てくるんですが、これ何でしたっけ?
... Replies ...
@ひで has joined the channel
GHC 9.0.1 ですが、Linuxではうまく動いています。
しかし、macOSだと warp や quic の cabal test が失敗するようになりました。
将来 GHC 9.0.2 となるブランチの先頭で試してみたいのですが、Intel macOS 用の GHC nightly build ってどこかに落ちていませんか?
gitlab を探してみたのですが、見つかりませんでした。
... Replies ...
stackのLTS18.16で、muslを静的リンクしたaesonに依存するバイナリを作ろうとして躓いています。
再現手順:
1. https://qiita.com/lambda_funtaro/items/5ac47f83616f8c07d4db の通りに設定する(stack.yaml中のdockerのrepoはutdemir/ghc-musl:v22-ghc8107にする)
2. package.yamlのdependenciesにaesonを加える
3. stack build --dockerする
4. ビルドに失敗する↓
Error: While constructing the build
plan, the following exceptions were
encountered:

In the dependencies
for hashable-1.3.0.0:
    integer-gmp must
                match >=0.4 && <1.1, but
                the stack configuration
                has no specified
                version  (latest
                matching version
                is 1.0.3.0)
needed due to test-0.1.0.0
               -> hashable-1.3.0.0

In the dependencies
for integer-logarithms-1.0.3.1:
    integer-gmp must match <1.1, but the
                stack configuration has
                no specified version
                (latest matching version
                is 1.0.3.0)
needed due to test-0.1.0.0
               -> integer-logarithms-1.0.3.1

In the dependencies
for scientific-0.3.7.0:
    integer-gmp needed, but the stack
                configuration has no
                specified version
                (latest matching version
                is 1.0.3.0)
needed due to test-0.1.0.0
               -> scientific-0.3.7.0

Some different approaches to resolving
this:

  * Recommended action: try adding the
    following to your extra-deps
    in (略)/stack.yaml:

- integer-gmp-1.0.3.0@sha256:514e81647473ce380cf1814821664c0dcedc2801ad8dbf41b19a10f916e1cc75,2138

Plan construction failed.
... Replies ...
stackのpackage.yamlのexecutables欄に指定することで異なるオプションを持つ複数のバイナリを生成することができますが、そのうちのいくつかをデフォルトでは生成されないようにすることってできますか
... Replies ...
@葉酸you3 has joined the channel
質問失礼します.
f(g(x)) はf.g $ x と表されますが,関数を連ねてしてデータを変換するという思考プロセスであれば,g.fのほうが自然かと思います.シンボルを読むのは左から右なのに,関数適用の順序を追って行くのは右から左に読むのは不自然です.UXINコマンドのパイプの思考に侵され過ぎているだけでしょうか?
ただ,この仕様を変更しただけでは,今度は前置記法から来る違和感が発生するとは思います.

既出の議論であれば申し訳ございません.
... Replies ...
Endo Ryunosuke / minerva
@Endo Ryunosuke / minerva has joined the channel
@ose20 has joined the channel
pattern synonyms は便利なんですが、以下の例では Show インスタンスが冗長に感じます。自動生成する方法はありませんか?

newtype Error = Error Int
pattern InternalError = Error 1
instance Show Error where
  show (Error 1) = "InternalError"
... Replies ...
これと等価なことをHaskellでやる方法ってありますか?
https://qiita.com/yosuke_furukawa/items/ec30f619166cb8090a09
... Replies ...
@t-shibata has joined the channel
akira ishiguro
@akira ishiguro has joined the channel
@η has joined the channel
@ has joined the channel
@Kamijo has joined the channel
@tm has joined the channel
Sum Typeに対するLensのフィールドを自動生成する方法について質問です。
(多分日本語を含むのでバイナリ扱いされている)スニペットに詳細を書いてあるように、

deriveFieldsForSumType ''HasBase ''ToyExpr

のように書いたら、

instance HasBase ToyExpr Text where
  base = lens getter setter
    where getter (ToyExprToyInt x) = view base x
          getter (ToyExprToyStr x) = view base x

          setter (ToyExprToyInt x) y = toToyExpr $ set base y x
          setter (ToyExprToyStr x) y = toToyExpr $ set base y x

のようなコードが自動生成されると嬉しいなと思っています。

軽く探した所そういうライブラリは見当たらなかったので、
自分で書こうとも思っていますが、
Template Haskellはそんなに得意では無いので、
既存のライブラリがあったり、
そもそも他の方法を使えばボイラープレート書かなくても良いなどという指摘があれば欲しいと思っています。
... 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
@Tak has joined the channel
HspecのExpectations(`shouldBe` とか)について質問です
数値をテストする際に、浮動少数計算によって起きる僅かな誤差を取り除いてくれるExpectationってありますか...?
今3次元ベクトルを回転行列で変換する関数を書いていて、そのテストをしたいのですが三角関数周りの誤差でテストが書けずにいます...
例えば cos (pi/2) shouldBe` 0` は成功してほしいのですが失敗するなどします。

現在は、ある程度の誤差を無視する以下のような関数を作成してそれで判定をしているのですが、何かしら一般的な方法があったりしますでしょうか...?
almostEqual :: Float -> Float -> Bool
almostEqual a b = a+diff >= b && b <= a+diff 
  where
    diff = 0.1 -- 無視してよい誤差の範囲を決めるよしなな数字、今は適当

... Replies ...
@ has joined the channel
こんな感じの関数を書きたいのですが、型エラーの直し方が分かりません!
(詳細なエラーをスレッドに貼ります)
liftToReader
  :: forall env m a. (MonadReader env m, MonadIO m)
  => (env -> IO a) -> m a
liftToReader f = reader $ \env ->
  (liftIO :: IO a -> m a) $ f env
... Replies ...
IOの正体はRealWorldに対する読み書きを表す(State# RealWorld -> (# State# RealWorld, a #))だと聞いたのですが、RealWorldからの読み出しのみすることを表す(State# RealWorld -> a)に対応する型はありますか?
... Replies ...
@kenko has joined the channel
@毛糸 has joined the channel
@はけた has joined the channel
@ryotomi has joined the channel
@ has joined the channel
@ has joined the channel
@htlsne has joined the channel
識者がいれば教えてほしいんですけど、text 2.0 で Windows 向け GHC 8.2 の MinGW に付いてこない C ライブラリーを使うようになったんですかね?これは推測でまったくの検討違いかもしれないのですが。
ことの発端としては Glob のテストが通らなくなりまして、エラーメッセージ的にそうかなあと。
C:\sr\ghc-8.2.2\text-2.0-5e3f12ca9a37edf5a48459f7f3969564285f2adb\lib/libHStext-2.0-5e3f12ca9a37edf5a48459f7f3969564285f2adb.a(measure_off.o):measure_off.c:(.text+0x2da): undefined reference to `__get_cpuid_count'

https://github.com/Deewiant/glob/runs/4826516512?check_suite_focus=true#step:6:39
... Replies ...
cabal や stack でプロジェクト作ってて今このライブラリーのどのバージョンを使ってるんだろう(どのバージョンに依存解決されてるんだろう)?ってどうやったら知れるんでしょうか?
... Replies ...
Hiromi ISHII / mr_konn
ghc-pkg list?(stack や cabal v2-buildを使っている限り複数バージョンがリストされることはないはず)
... Replies ...