Questions tagged [haskell]

Haskell は純粋、遅延評価、静的型付けを特徴とする関数型言語。

Haskell は関数型言語の一つで、次のような特徴を持ちます:

  • 副作用を認めない純粋性 (入出力のモデルとしてを他言語のような副作用を必要としない)
  • プログラムの実行戦略として遅延評価を採用
  • 静的型システムによる型安全性の保障

Haskell は言語仕様は Haskell 2010 にまとめられています。Haskell 処理系の実装は複数ありますが、GHC がもっとも広く使われています。

102 questions
13
votes
1 answer

Haskell の数値リテラルに対するメモ化

かなり古い記事ですが,本物のプログラマはHaskellを使う - 第31回 禁断の機能「unsafePerformIO」の深淵:ITproという記事を見つけ,メモ化についての記述に興味を持ち記載のコードを試したところ少し挙動が違って,単なる数値リテラルが(という言い方は不適切のような気がしますが)メモ化されないように見えたので,それについての質問です. コンパイラは ghc の 7.6.3, ghc $1 -O2 でコンパイルした結果です. (A) import qualified…
Yosh
  • 1,293
  • 1
  • 11
  • 30
11
votes
1 answer

'>>=' ってなんて読むのでしょうか?

Haskellや圏論でおなじみの (>>=) :: m a -> (a -> m b) -> m b ですが,(上記はHaskellの型シグネチャーになります.) 口語ではなんて呼べば良いんでしょうか? 僕は勝手に"join fmap" とか読んでたんですが. 名称は存在するんでしょうか. よろしくお願いします.
Gogo Tanaka
  • 265
  • 1
  • 8
10
votes
2 answers

Haskell の レコード構文(Record Syntax)にて、簡潔なフィールド名を定義すると重複しやすい問題の解決方法

Haskell の レコード構文(Record Syntax)にて、簡潔なフィールド名を使い定義すると名前がかぶりやすくなる問題があります。 参考サイト を見ると、レコード名をprefixとしたフィールド名を使うとよいようですが、こんなものなのでしょうか? よりよい方法はないものでしょうか? エラーになる例: data Java = Java { power :: Integer ; url :: String } data Link = Link { title :: String ;…
tobynet
  • 503
  • 3
  • 12
10
votes
1 answer

haskellのdoctestで日本語をテストする方法

haskellのdoctestで日本語をテストする方法を知りたいです module Main where -- | 日本語表示 -- >>> hoge -- "日本語" hoge :: String hoge = "日本語" main :: IO () main = print hoge 上記内容をテストすると expected: "日本語" but got: "\26085\26412\35486" Examples: 1 Tried: 1 Errors: 0 …
katou
  • 181
  • 3
10
votes
2 answers

Haskell にて、無名関数(anonymous function)を表示する方法はありませんでしょうか

例えば、以下のような式をエラーを出さずに出力したいと思います。 \x -> x ^ 4 (^4) map (^4) ghci(対話環境) で試していたところ show (\x -> x ^ 4) では、 以下のようなエラーがでてしまいます。 Prelude> show (\x -> x ^ 4) :6:1: No instance for (Show (a0 -> a0)) arising from a use of ‘show’ In the…
tobynet
  • 503
  • 3
  • 12
7
votes
1 answer

HaskellにおけるProfunctorのUpStarとControl.Arrow.Kleisliについて

Profunctorというライブラリに、以下の様なUpStarという型があります https://hackage.haskell.org/package/profunctors-4.3.2/docs/Data-Profunctor.html#t:UpStar https://github.com/ekmett/profunctors/blob/v4.3.2/src/Data/Profunctor.hs#L67 newtype UpStar f d c = UpStar { runUpStar…
Kenji Yoshida
  • 546
  • 3
  • 16
6
votes
1 answer

`error` を投げることがある巨大な再帰ケースをできるだけ簡単に `Maybe` 化する方法はありますか

Haskell で、ある再帰直和型 T に対し、 T -> T のような関数があり、既に実装されているとします。たとえば、 data T = Z | One T | Two T T | Three T T T | .. -- 沢山あります f :: T -> T f Z = Z f (One t) = One (f t) f (Two t1 t2) = Two (f t2) (f t1) --…
camlspotter
  • 1,354
  • 7
  • 15
6
votes
2 answers

内包表記で生成したリストを2回使うと、スペースリークでシステムが停止してしまう

円周率を近似するコードです。 main :: IO () main = do let points = [(x,y) | x<-range 10000, y<-range 10000] let all = length $ points let hit = length $ filter ((<= 1) . distance) points putStrLn $ show $ (fromIntegral hit * 4) / (fromIntegral…
6
votes
1 answer

Haskellで以下のエラーが出てしまう

「プログラミングHaskell」を勉強していて、9章サンプルコードが実行できず困っています。 https://github.com/macalimlim/programming-in-haskell/blob/master/Chapter9.hs 以下のコードを実行しようととすると、このようなエラーが出てしまいました。 どなたか詳しい方、ご助言頂けるとありがたいです。。 Parsing.hs:8:10: error: • No instance for (Applicative…
mnuma
  • 63
  • 3
6
votes
1 answer

Haskellのtype演算子に型シノニム以外の使い方はありますか?

最近Haskellの勉強を初めて,適当にライブラリを読んでいるのですが,type演算子の用途について疑問があります. 例えば,以下の例ですと右辺がなく,何のシノニムになっているのか分かりません. https://github.com/RaphaelJ/friday/blob/master/src/Vision/Image/Class.hs#L93 class Storable (ImagePixel i) => MaskedImage i where type ImagePixel…
5
votes
1 answer

Haskell のモナドに関するデザインパターン的なものはありますか?

オブジェクト指向は、それ自体はそこまで難しくない概念ですが、それを実際のアプリケーションに落としこもうとする際には考慮するべきことが多く、なので、 GoF に代表されるような、オブジェクト指向におけるデザインパターンが編み出されてきました。 Haskell で、プログラムの中心的な役割を果たすのはモナド(do 記法の syntax sugar がある、潰せる構造)ですが、それを実際のアプリケーションに落としていこうとすると、少し飛躍があるような気がします。 質問 Haskell…
Yuki Inoue
  • 16,805
  • 19
  • 80
  • 196
5
votes
1 answer

haskell のメモリリークはどうやったらデバッグできる?

なぜこのコードはスペースリークしますか? を見ていて、次の疑問が生じました。 Haskell におけるメモリリークはどうやったらデバッグできるのか というのも、上記のケースでは、プログラムの構造がシンプルであったため、目確認でも問題の箇所を特定することができますが、プログラム構造が複雑になった時には、実質これは不可能になると考えられます。 質問 haskell のコードでメモリリークをデバッグするには、どのような方法がありますか?
Yuki Inoue
  • 16,805
  • 19
  • 80
  • 196
4
votes
2 answers

Haskellの単体テストの選び方

Haksellで単体テストを書きたいと思い調べていたのですが ・Hunit ・QuickCheck ・test-framework(HunitとQuickCheckが含まれる?) ・Hspec と複数見つかりどれを使用するのがいいのかわかりませんでした。 これらは状況によって使い分けるものなのでしょうか それとも、とりあえずこれを覚えとけばいい。 というものがあるのでしょうか また、テストを書くにあたって学習になるサイト もしくは書籍あれば教えていただけるとありがたいです
katou
  • 181
  • 3
4
votes
1 answer

『ビンゴカード作成問題』で書いたソースの改善方法について

漠然とした質問で申しわけないのですが お力を貸していただけるとうれしいです 『Ruby初心者必見!?「ビンゴカード作成問題」のリファクタリング風景をお見せします…
katou
  • 181
  • 3
4
votes
1 answer

Haskell の レコード構文(Record Syntax) にて、より簡潔にフィールド(field)にアクセスする方法はありませんでしょうか。

以下のようにレコード構文(Record Syntax)にて独自の名前付きフィールド(Named Fields)らを定義し、フィールド(Field)の一部を利用する場合に、より簡潔な方法はありませんでしょうか? 下記のコードでいえば fNumField Foo{hoge = x} = x ^ 2 の部分が粗雑に感じます。 data Foo = Foo{ bar :: String , hoge::Integer} deriving (Show) main = do print $…
tobynet
  • 503
  • 3
  • 12
1
2 3 4 5 6