tyvutt
@tyvutt has joined the channel
machinecell
について質問です。(***)
演算子が平行に射を合成するよ、という意味で使っているもので、並列演算の意味ではないんですね。パッケージの標準機能としては、マルチスレッド的なものは提供していません。まず初期にmtl(mtl V1)があり、その後に新機能のtype familiesを用いたmtl-tfが開発されたものの mtlと重複した部分が多く互換性もなかった。 そこで拡張なしの素のHaskell98で動くtransformersが開発され、 その上にmonads-fdとmonads-tfを別々に構築することで互換性の問題は解決された。 しかしその頃にはすでにmtlが広く使われていたため、transformersとmonads-fdからmtlを再構築(mtl V2)することになった、 という経緯のようです。
MonadError SomeException m => m a
な文脈の中で MonadThrow m => m a
な関数を使いたくなったんですが、混ぜるハックありますかね?foo :: MonadError SomeException m => m a foo = do -- ここで使いたい -- 型はライブラリー A で決まってある bar :: MonadThrow m => m a -- これを使いたい -- 型はライブラリー B で決まってある
MonadErrorとはmtlのでしょうか?そうです
MonadThrow
は exceptions のですこれの意図はMonadThrowのthrowMをMonadErrorのthrowErrorにするようにしたいということでしょうか?そうですね。例えば一旦捕えて投げ直すとか。
type M5 = MaybeT (MaybeT (MaybeT (MaybeT Maybe)))
returnM5 :: a -> M5 a returnM5 x= MaybeT $ MaybeT $ MaybeT $ MaybeT $ Just $ Just $ Just $ Just $ Just x bindM5 :: M5 a -> (a -> M5 b) -> M5 b bindM5 x = case x of Nothing -> MaybeT $ MaybeT $ MaybeT $ MaybeT $ Nothing Just x -> case x of Nothing -> MaybeT $ MaybeT $ MaybeT $ MaybeT $ Just $ Nothing Just x -> ...
data M5' a = Just' a | Nothing1 | Nothing2 | Nothing3 | Nothing4 | Nothing5
stack hoogle
コマンドを普通に実行すると、現在開発している(stack.yamlを置いている)プロジェクトのインデックスを生成したいのか、開発中のプロジェクトのビルドを始めます。stack hoogle -- generate base
?stack hoogle -- generate
でいけました!openBinaryFile: invalid argument (Invalid argument)
と出たのは何だったんだろう。。。)haskell module Sonoda.Parser #if ON_GHCI ( ParseException (..) , parseExpr , parseType , exprParser , typeParser ) where #else where #endif
:load コマンドでそのmoduleを読んだだけではダメなんですかね…
ついでに,other-modulesでInternalモジュールにしてそこでは全てexportし,exposed-modulesでreexportするのはダメなんですか?うーん、考えてみます。
ソースファイルをコンパイルするとき、GHCはふつう二つのファイルを出力する。オブジェクトファイルとインタフェースファイルである。
オブジェクトファイルは通常.oで終わり、そのモジュールのコンパイル済みコードを含む。
インタフェースファイルはふつう.hiで終わり、そのモジュールに依存するモジュールをコンパイルするときに必要な情報を含む。エクスポートされた関数の型や、データ型の定義といったものがこれに含まれる。バイナリ形式なので、読もうとしないように。代わりに—-show-ifaceオプションを使うことができる。