New Threads

Is there a way to inspect the definition...

Is there a way to inspect the definition of derived instances?
Say: ```data Free f a = Pure a | Free (f (Free f a)) deriving Functor```

3 replies

extensibleについて再び質問です。 `Associate k v xs ...

extensibleについて再び質問です。
Associate k v xs => FieldName k -> Record xs -> v
という型の関数を書くにはどうすればよいでしょうか?
FieldName k はざっくりいうと Optic の 型シノニムなので普通のlensや mkField で作られたフィールドらしく
record ^. field みたいな式で取り出せるかな、と思ったのですが、

app\record-placeholder.hs:53:23: error:
    • Couldn't match type ‘LabelPhantom
                             k1
                             (Inextensible (Field Proxy) '[k1 ':> ()])
                             (Proxy (Inextensible (Field Proxy) '[k1 ':> ()]))’
                     with ‘Record xs -> Const a0 (Record xs)’
      Expected type: Control.Lens.Getter.Getting a0 (Record xs) a0
        Actual type: FieldName k1

という内容のコンパイルエラーで怒られてしまいました 😞

8 replies

glossを依存関係に加えた後にビルドしようとしたら、freeglutをインスト...

glossを依存関係に加えた後にビルドしようとしたら、freeglutをインストールしていなかったために推移依存関係によるGLUTのビルド時に何かが壊れたようで、precompiled packageが全部読み込めなくなったみたいです。

7 replies

ライフゲームを作りたいんですが、そのためのGUIライブラリでいいものはありますか...

ライフゲームを作りたいんですが、そのためのGUIライブラリでいいものはありますか?

4 replies

質問があります。 練習のために、 stack resolver lts-11....

質問があります。

練習のために、 stack resolver lts-11.9 の環境で数独に関するライブラリを作っています。
いま、一つのセルの状態を表現するために Maybe を使おうと思ってます。
例えば、あるセルに 1 が入っていれば Maybe 1 、空ならば Nothing という具合です。

ただ、そのままでは show した時に Maybe や Nothing が表示されてしまうので、
この表示を変えたいと思っています。
例えば、 Maybe 1 ならば 1 、 Nothing ならば _ が出力されるという具合にです。
出来れば read も同じように出来ると嬉しいです。

Maybe 関連のライブラリ関数を使いたいので、さしあたって show と read の振る舞いだけ変えたいのです。
こういった、ほとんど同じなんだけど、ほんの少し振る舞いが異なる型を表現したいときはどうしたら良いのでしょうか。

よろしくお願いします。

9 replies

毎度ありがとうございます。 「レコードから指定したキーの要素を取り除いたレコード...

毎度ありがとうございます。
「レコードから指定したキーの要素を取り除いたレコードを返す関数」作りの続きです。
👇 のような、closedな型族と型クラスを組み合わせて、レコードが空の場合とそうでない場合とで実装をわけられるようにしました。
が、残念ながら今度は実装で思わぬコンパイルエラーになってしまいます(エラーメッセージは後ほどコメントに張ります)
おそらくもう一歩なところだと思うので、助言をいただきたく!

type family Result (x :: k) (xs :: [k]) :: [k] where
  Result x '[] = '[]
  Result x (x ': xs) = Result x xs
  Result x (y ': ys) = y ': Result x ys

class Without (x :: k) (xs :: [k]) where
  without :: Membership xs x -> (h :* xs) -> (h :* Result x xs)

instance Without x '[] where
  without _ _ = nil

instance Without x (x ': xs) where
  without key rec =
    let (_, ys) = huncons $ toHList rec
    in without key (fromHList ys)

instance Without x (y ': ys) where
  without key rec =
    let (y, ys) = huncons $ toHList rec
    in y <: without key (fromHList ys)

huncons :: HList h (x ': xs) -> (h x, HList h xs)
huncons (HCons hx hxs) = (hx, hxs)

8 replies

extensibleの使い方について質問です。 現在「レコードから指定したキーの...

extensibleの使い方について質問です。
現在「レコードから指定したキーの要素を取り除いたレコードを返す関数」を作ることを目指して、こんな感じの関数を書いてみました。

without :: Membership xs x -> (h :* xs) -> (h :* ys)
without k =
  hfoldrWithIndex (\i e r -> if k == i then r else e <: r) nil

しかし残念ながら ysxs の関係をうまく推論できないのか、型エラーになってしまいます。
型レベルプログラミング力が足りず、手詰まり気味です。
よい方法を教えていただきたく! 🙏

13 replies

64bitの符号なし整数を、次のような形式のJSONで送ってくる(私が直接いじれ...

64bitの符号なし整数を、次のような形式のJSONで送ってくる(私が直接いじれない)サーバーがあります。

{ high: <上位32bitを表す符号付き整数>, low: <下位32bitを表す符号付き整数> }

この形式のJSONから Int64 を作り出す方法を考えているのですが、バイナリ力が低くて悩んでおります。
上位ビットは shiftL 32 とすればいいのはすぐにわかったですが、下位ビットについてどうすればいいか、教えていただきたいです。
例: input: { high: 177247787, low: -813694976 }
output: `761273451934646272`

36 replies

`optparse-applicative`に関する質問です。サブコマンドで定義...

optparse-applicativeに関する質問です。サブコマンドで定義したhelp文を--helpコマンドで表示させる方法はあるのでしょうか。以下のようなコマンドを受け付けることを期待しています

:main processTicket --help


コードをGistに掲載しました。
https://gist.github.com/HirotoShioi/e88f3d1622d7d7961e906191263d3d31#file-optparse-applicative-L24

5 replies

fusion の質問です。Bird の本に頻出する型 f . foldr g ...

fusion の質問です。Bird の本に頻出する型 f . foldr g a = foldr h b [PoFAD] (pp.34) が良く分かりません。何かもっと詳しい説明・文献がありますでしょうか?
他の型であれば、例えば "foldr/build fusion" や "destroy/unfoldr fusion" や "Church/Cochurch fusion" ならば以下の文献がありますが、これらとも違いますよね?
[PoFAD] (2010) "Pearls of Funcional Algorithm Design" Bird, R
[FPCA 1993] "A Short Cut to Deforestation" Gill, A. Launchbury, J. Jones, S.L.P.
[ICFP 2002] "Shortcut Fusion for Accumulating Parameters & Zip-like Functions" Svenningsson, J.
[Oxford 2011] "Theory and Practice of Fusion," Hinze, R. Harper, James, D.W.H.

6 replies

yesod界隈では{fast,monad}-loggerが使われていますが、一般...

yesod界隈では{fast,monad}-loggerが使われていますが、一般的にロガーを自分で選択するときは何を使っていますか?

7 replies

package.yaml or cabalで,stack testを実行した時に...

package.yaml or cabalで,stack testを実行した時に特定のプリプロセッサフラグを有効にする方法は無いでしょうか?
DEVELOPMENTフラグを有効化してテスト時のみYesod.Auth.Dummyを読み込ませたいのですが…
一々stack test --flag application:devとタイプするしか無いのでしょうか サンプルを見るとtest以下にcpp-options: -DDEVELOPMENTと書けば良いように見えたのですが,どうもそうではないっぽい

4 replies

stack new でテンプレートを指定しなかったときデフォルトで使われるファイ...

stack new でテンプレートを指定しなかったときデフォルトで使われるファイルを new-template 以外のカスタムテンプレートを使うように簡便に指定できないものでしょうか.

3 replies

コマンドライン引数のオプションの解析、自分で書いたことはありますが「車輪の再発明...

コマンドライン引数のオプションの解析、自分で書いたことはありますが「車輪の再発明やめよう」ということでライブラリを使おうと思い調べてみたところ、かなり候補が出てきたのですが、オススメとか避けるべきとかってありますかね
https://wiki.haskell.org/Command_line_option_parsers

5 replies

HDBC-mysqlで、ブロックが発生するクエリを実行した際に、他のスレッドが停...

HDBC-mysqlで、ブロックが発生するクエリを実行した際に、他のスレッドが停止してしまい困っています。
対処方法などご存知の方いたら教えて下さい。
(HDBCというより、ffiで一般的な話な気もしますが、調べてもわからず、、)

module Main where

import Control.Monad
import Database.HDBC
import Database.HDBC.MySQL
import Control.Concurrent

main = do
  forkIO $ do  -- quickQuery'でブロックが発生した時点で処理がとまる
    forM_ [0..10] $ \i -> do
      print i
      threadDelay $ 1000*1000
  conn <- connectMySQL defaultMySQLConnectInfo {  } 
  withTransaction conn $ \c -> do
    quickQuery' c "select * from hoge where id = 1 for update" [] -- 別途ロックしてから実行
  threadDelay $ 10000*1000


ghc-options:         -threaded -rtsopts -with-rtsopts=-N -eventlog

4 replies

凄く初歩的な質問で恐縮なのですが、 Text←→Intの変換は、どのような方法が...

凄く初歩的な質問で恐縮なのですが、
Text←→Intの変換は、どのような方法が定番なのでしょうか?

今は、プログラム毎に(pack . show)や(read . unpack)で変換しているのですが、
毎回記述するので、何かライブラリ側で提供されていないのかなぁと思う一方、
text-showとData.Text.Readで行うのも対称的じゃないので、どうなんでしょう?と思っている次第です。
よろしくお願い致します。

16 replies

ghc8.6のブランチが切られるまであと6週間しかないですが、DerivingV...

ghc8.6のブランチが切られるまであと6週間しかないですが、DerivingVia拡張をghc8.6に間に合わせるみたいです。
すごい腕力ですね:haskell:
https://mail.haskell.org/pipermail/ghc-devs/2018-April/015647.html

2 replies

機械学習のライブラリで良さげなものを教えてください。

機械学習のライブラリで良さげなものを教えてください。

8 replies

haddock の質問です。 モジュールや関数のドキュメントの出力する/しないを...

haddock の質問です。
モジュールや関数のドキュメントの出力する/しないを、環境変数か何かで切り替えたりするようなことはできますでしょうか?
内部向け(development)と外部向け(production)で、出力内容を切り替えたいです。

8 replies

stackのtestフォルダー内にあるファイル(例えば`Spec.hs`)で定義...

stackのtestフォルダー内にあるファイル(例えばSpec.hs)で定義した関数をghciを用いてターミナルで実行できるようなコマンドがあったと思うのですが、なんでしたっけ。。
例えば Spec.hs内にfoo :: [Int] -> Boolという関数があった場合にはghci内で
quickCheck foo
と呼び出したいのです。

3 replies