New Threads

以下のコードをビルドすると `Orphan instance: instance...

以下のコードをビルドすると Orphan instance: instance From Word8 HogeSerializeFormat という警告が出てしまいます。
https://repl.it/repls/SilverIntentEmulator
{-# OPTIONS_GHC -fno-warn-orphans #-} をつければ警告を消せるようなのですが、そもそもこの警告は何が問題なのでしょうか?(実行時にエラーになる場合があるなど)
ネットで調べてみると instance From Word8 HogeSerializeFormat の部分のファイルを分ければよいということが書いてあったのですが、分けようとした(module Data.Word内に書いてみた)際に循環importになってしまいビルドができなくなってしまいました。
hs-bootというものを使えば解決できると書いてあったのですが、僕の理解が間違っているのかhs-boot内でお互いをimportしてしまい、結局循環import問題が発生してしまいました。
長くなりましたが、この問題はどう解決するのがベストなのでしょうか? {-# OPTIONS_GHC -fno-warn-orphans #-} をつけて警告を消してしまってよいのか、それとも別の方法がよいのか。
よろしくお願い致します。

8 replies

Kan extension は何か具体的な用途や例などあるの? 最近 Kan e...

Kan extension は何か具体的な用途や例などあるの?
最近 Kan extensionを勉強して、なんとか理解できたけど、実際の用途は全然思いつかなくて…

4 replies

<https://haskell-jp.slack.com/archives/C...

https://haskell-jp.slack.com/archives/C707P67R7/p1533525889000105 こちらの質問に答えるにあたり気になったのですが、
VS CodeでHIEを起動した場合、HIEのデバッグオプションはどうやって設定するんでしょうか...?
Neovimの場合languageclientの設定でいけるんですけど...
さっと https://github.com/alanz/vscode-hie-server/blob/master/src/extension.ts のソースを読んでもわからず。

5 replies

いくつか質問させてください。 1. このコードで `:: Int` を推論して...

いくつか質問させてください。

1. このコードで :: Int を推論してもらうことはできないのでしょうか?Intを受け取るものしか定義していないのでしてくれても良さそうに感じるのですが…
https://repl.it/repls/EnormousStimulatingCalculator

2. Maybeでラップしたものを返したいのですがどのように定義したら良いのでしょうか?
https://repl.it/repls/MassiveAssuredBootstrapping

3. そもそもこういうことができるクラスは標準で用意されていたりしないのでしょうか?RustのFromトレイトみたいなことがしたいのですが…

よろしくお願い致します。

9 replies

`ForeignObj#` はいったい何だろう、ググっても、GHCのgitを全部...

ForeignObj# はいったい何だろう、ググっても、GHCのgitを全部検索しても見つからない https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi-chap.html#unboxed-types

2 replies

いつもお世話になります。並列処理時の設計について質問です。 実行時に決定される...

いつもお世話になります。並列処理時の設計について質問です。

実行時に決定されるリスト xs と、そのリストの要素を引数とするIOアクション f::x->IO() があり、 mapConcurrently_ で並列化しました。

ここで、f が他のリストの要素に影響与えないように縛る(?)にはどうしたら良いでしょうか? f の中ではxをキーとして複数の外部資源にアクセスしますが、例えば f のどこかで x+1 を使うというようなことを避けたい。これが守られない場合、並列で動かした時、デッドロックや外部資源上のデータの破損などが発生します。

fは規模が大きくなって、複数の開発者が携わる可能性があります。「コードレビュー時に気をつける」という以上に、完璧でなくてもいいのですが、何らかの仕組みを考えたいです。

以下、なけなしのhaskellの知識で考えた対策案ですが、よりhaskellらしい方法もあろうかと思います。よろしくお願いします。

案1)f 内で使われる外部資源にアクセスする関数(例えば g::x->y->IO(), y は更新したい内容)について、予めxを部分適用した g’ を、f に渡して、f内では直接 xに触らないようにする。この場合、fが大きくなると、部分適用した関数をあちこち取り回さないといけないので、ちょっと面倒な感じもします。

案2)Readerモナドにxを入れて、外部資源にアクセスする関数は x をモナド経由で取り出す。Readerモナドは、ネストした関数に適用するときはlocalで上書きできてしまうので、localのないReaderモナドのようなものがあればいいのかもしれませんが、いまのところ探せていません。

10 replies

どこのバグなのかよくわからないんですが、extensibleを使った :poin...

どこのバグなのかよくわからないんですが、extensibleを使った 👇 のコードでなぜか型エラーになってしまいます。

{-# OPTIONS_GHC -fno-warn-simplifiable-class-constraints #-}

{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE OverloadedLabels  #-}
{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Extensible as E
import           Lens.Micro      ((^.))

hoge
    :: E.Associate "pageId" String e
    => E.Record e
    -> IO ()
hoge e = do
    let (h : _) = (e ^. #pageId)
    print (h :: Char)

9 replies

何回も申し訳ありませんが質問です。 `Data.Extensible` のレコー...

何回も申し訳ありませんが質問です。 Data.Extensible のレコードから Web.Internal.FormUrlEncodedForm に変換する以下のようなコードで

{-# LANGUAGE AllowAmbiguousTypes         #-}
{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE FlexibleContexts         #-}
{-# LANGUAGE FlexibleInstances         #-}
{-# LANGUAGE MultiParamTypeClasses         #-}
{-# LANGUAGE OverloadedStrings         #-}
{-# LANGUAGE ScopedTypeVariables         #-}
{-# LANGUAGE TypeOperators     #-}
{-# LANGUAGE UndecidableInstances     #-}
{-# LANGUAGE UndecidableSuperClasses #-}


module Hrafnar.Service.Common
  ( AwaitRequest
  , Server
  ) where

import           Data.Extensible
import           Data.HashMap.Strict as HM
import           GHC.TypeLits
import           Web.Internal.FormUrlEncoded

instance Forall (KeyValue KnownSymbol (Instance1 ToFormKey h)) xs => ToForm (Field h :* xs) where
  toForm = Form . hfoldlWithIndexFor
    (Proxy :: Proxy (KeyValue KnownSymbol (Instance1 ToFormKey h)))
    (\k m v -> HM.insert (toFormKey $ symbolVal $ proxyAssocKey k)  [toFormKey v] m)
    HM.empty

としたのですがどうしても
    • Could not deduce (ToFormKey (Field h x))
        arising from a use of ‘toFormKey’
      from the context: Forall
                          (KeyValue KnownSymbol (Instance1 ToFormKey h)) xs
        bound by the instance declaration
        at src/Hrafnar/Service/Common.hs:33:10-91
      or from: KeyValue KnownSymbol (Instance1 ToFormKey h) x
        bound by a type expected by the context:
                   KeyValue KnownSymbol (Instance1 ToFormKey h) x =>
                   Membership xs x
                   -> HashMap Text [Text] -> Field h x -> HashMap Text [Text]
        at src/Hrafnar/Service/Common.hs:(34,19)-(37,12)
    • In the expression: toFormKey v
      In the second argument of ‘HM.insert’, namely ‘[toFormKey v]’
      In the expression:
        HM.insert (toFormKey $ symbolVal $ proxyAssocKey k) [toFormKey v] m

というエラーが出て悩まされています。お心当たりありませんか

13 replies

unlift.ioの対応でresourcetのインスタンスにstatetを受け付...

unlift.ioの対応でresourcetのインスタンスにstatetを受け付けなくなってますが、
どのように修正するのがおすすめでしょうか。
http://hackage.haskell.org/package/conduit-find
(リンク張り間違えていました。find-conduitでなくてこっちでした。)
ちなみにこれを使いたいです。

5 replies

Hakyllのビルドがメモリ不足で失敗するのですが何か良い対策はありませんか?H...

Hakyllのビルドがメモリ不足で失敗するのですが何か良い対策はありませんか?Hakyllそのものに手を入れて二つのライブラリへ分割してコンパイルさせることで対処していますが、あとあと困りそうで……

5 replies

例えば ``` type Key = String type Value = S...

例えば

type Key = String
type Value = String
data Hoge = [(Key, Value)] 

みたいな型があったとして、Keyが重複していたらコンパイル時にエラーを出すような仕組みって作れるんでしょうか。TemplateHaskellを利用したらできるんでしょうか。

3 replies

特定のインスタンスを持っている場合だけ処理を変えたいのですが、なにかやり方はあり...

特定のインスタンスを持っている場合だけ処理を変えたいのですが、なにかやり方はありますでしょうか?
具体的には、

fromIntegral :: (Num a, Integral i) => i -> a

を拡張して、 (Floating a, Bounded i) の場合だけ、ノーマライズする処理を入れたいです。

気分的にはこんなコードを動くようにしたいです。

class FromIntegralNormalized i a where
  fromIntegralNormalized :: i -> a

instance (Integral i, Num a, Bounded i, Floating a) => FromIntegralNormalized i a where
  fromIntegralNormalized = (/ fromIntegral (maxBound :: i)) . fromIntegral

instance (Integral i, Num a) => FromIntegralNormalized i a where
  fromIntegralNormalized = fromIntegral

7 replies

VSCodeでHaskell IDE engineを使用していると気づいたら5,...

VSCodeでHaskell IDE engineを使用していると気づいたら5,6GBもメモリを消費しているのですが、これを回避する方法はありますか。いまのところは定期的にIDEを再起動してこれを回避しています。

3 replies

末尾再帰していなくてもHaskellでスタックオーバーフローってめったに見ないん...

末尾再帰していなくてもHaskellでスタックオーバーフローってめったに見ないんですけどどうしてなんでしょうか?スタックがデフォルトで深めに設定されている?

12 replies

純粋なのに例外を投げる関数に対する例外処理ついて質問です。 例えばこのような例外...

純粋なのに例外を投げる関数に対する例外処理ついて質問です。
例えばこのような例外を投げる純粋関数があるとし、そしてその例外を投げてくる原因が不明だったとします。

-- evilFunを使用する人には"hiroto"がエラーを吐くことがわからない。
evilFun :: Text -> Text
evilFun "hiroto" = error "This is evil function"
evilFun _ = "Everything is alright!"


この関数を使用した際の例外処理はどのようにすればよいのでしょうか。(Either, Maybe, MonadCatch..?)

9 replies

`Data.Vector.Storable.Mutable.unsafeFrom...

Data.Vector.Storable.Mutable.unsafeFromForeignPtr の説明で、
http://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Storable-Mutable.html#v:unsafeFromForeignPtr
> Modifying data through the ForeignPtr afterwards is unsafe if the vector could have been frozen before the modification.
とあるけれど、 freeze なら複製されるはずだし、 unsafeFreeze ならそれを呼ぶ側の責任だしで、これがどれくらい危険なのかよく分からず……
どういう場合にどれくらい危険なのか、どなたかご存じないでしょうか?

4 replies

また、こういったライブラリを調べる際には、皆さんどういったところから探してきてお...

また、こういったライブラリを調べる際には、皆さんどういったところから探してきておられるのですかね?
結構はやりすたりというか、どういうやり方でやるのが良いかという論争があったりするように聞いているので、出来るだけ現在の様子を知ってから選びたいと思っているのですが。

4 replies

readFile を使ってファイルを読み込もうとしています。ただ、 "~/.ba...

readFile を使ってファイルを読み込もうとしています。ただ、 "~/.bashrc" のような形式のパスは解釈してくれないようです。こういったパスをまとめて扱ってくれるようなライブラリはありますか?

3 replies

関数の `where` 内で、外側の型パラメータを参照することはできないのでしょ...

関数の where 内で、外側の型パラメータを参照することはできないのでしょうか?

hoge :: a -> [a] -> [a]
hoge x = go
  where
    go :: [b] -> [b]
    go xs = x : xs


例えばこういうコード↑で b ~ a としたいです。

9 replies

``` type family Fst (t :: (a, b)) :: a w...

type family Fst (t :: (a, b)) :: a where
  Fst '(a, b) = a

type family Snd (t :: (a, b)) :: b where
  Snd '(a, b) = b

extractedTuple :: '(Fst a, Snd a) :~: a

みたいなので, extractedTupleunsafeCoerce 無しに実装する方法ってありますでしょうか?もしくは,Fst/Sndの代用となるtype utilityってなんかあったりするのでしょうか?

7 replies