トップページtech
1002コメント312KB

関数型プログラミング言語Haskell Part28 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/04/10(金) 01:30:32.61ID:KZNYLMbm
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part27
http://peace.2ch.net/test/read.cgi/tech/1420718555/
0446デフォルトの名無しさん2016/06/06(月) 12:31:09.12ID:EqzbMvnJ
岡部 健
0447デフォルトの名無しさん2016/06/06(月) 20:19:50.08ID:vWa0r7As
>>445
つまりコマンド引数から得た文字列は端末のエンコーディング設定と同じ文字コードになっている、
という解釈でよいのですね。
だからリテラル文字列と一緒に処理する時は注意が必要、と。


ところで梨の礫なんて言葉、最近はなかなかお目にかかれません。
おばあちゃんでしょうか。
なんかほっこりした気分になりました、ありがとうございます。
0448デフォルトの名無しさん2016/06/13(月) 20:25:55.22ID:s5cEFL5F
Text.ParserCombinators.Parsecについて質問です

letter `manyTill` try p


pは数文字食ってから失敗するかもしれないパーザです。これはpが成功しない間 letter を繰り返し食って、最後にpを成功させて、食ったpの部分を除いた文字列を返しますが
除かないで末尾にくっつけたまま返して欲しい場合はどうしますか?
0449デフォルトの名無しさん2016/06/13(月) 22:43:48.50ID:rcz/H1iF
lookAhead
0450デフォルトの名無しさん2016/06/14(火) 21:28:34.01ID:R0tjr5X3
すみませんIO関数の使い方で解らなくなったのですが

func1 :: Int -> IO (Int, Int)
func1 n = do
let n' = func2 n
return (n, n')

func2 :: Int -> Int
func2 n = n * 2

IO関数の結果を通常の名前に束縛しようとしたら
(v1, v2) = func1 エラーになりました。

IO関数の返値を取り出して通常の変数に束縛して、
通常の関数に引き渡し計算をしたいのですが
その方法をもし知ってましたら教えて下さい。
0451デフォルトの名無しさん2016/06/14(火) 21:38:10.85ID:Sm/6bUGx
unsafePerformIOしかないんじゃない?
0452デフォルトの名無しさん2016/06/14(火) 22:27:07.09ID:5Tpa+uD8
>>450
日本語も意図もよくわからんが、そもそも

func1 n = (n, func2 n)

でいいと思うのだが。
0453デフォルトの名無しさん2016/06/14(火) 22:44:08.85ID:XZG+uE2j
>>450
俺も意図が分からんが、こういう事か?

func0 = do
 (x, y) <- func1
 func3 x
 func4 y
0454デフォルトの名無しさん2016/06/14(火) 22:47:22.10ID:XZG+uE2j
>>453
すまん、質問文につられて引数を忘れてた。

(x, y) <- func じゃなくて (x, y) <- func 1 な。
0455デフォルトの名無しさん2016/06/15(水) 22:15:27.27ID:vYYf6Ztk
>>451 >>452 >>453 >>454
どうもありがとうございます。

「unsafePerformIO」や「<-」での
バインド試してみます。
0456デフォルトの名無しさん2016/06/15(水) 22:30:31.44ID:6m5ApfU9
Haskellの型は弱いんですか!?
0457デフォルトの名無しさん2016/06/15(水) 23:18:57.29ID:bw2YOmBW
smtp認証がうまくできんなー
pythonなら余裕なんだが
0458デフォルトの名無しさん2016/06/16(木) 02:04:27.75ID:NRUgKoir
smtps-gmail でいいなら何の問題もないのでは。
「安全性の低いアプリの許可」がウザいけど
0459デフォルトの名無しさん2016/06/16(木) 17:01:17.73ID:pAcx7t63
>>458
ありがとう
普通に送れてる人がいるなら
やっぱりこっちの環境が悪いんやな~
0460デフォルトの名無しさん2016/06/16(木) 22:02:58.55ID:NRUgKoir
>>459
前バージョンでプルリク入ってたので
バージョンを1.3.2に上げれば大丈夫
0461デフォルトの名無しさん2016/06/17(金) 11:33:07.28ID:qUa7S6e8
>>460
smtps-gmailを1.3.1から1.3.2にアップデートしたら解決しました
ありがとうございました
0462デフォルトの名無しさん2016/06/19(日) 09:34:14.61ID:U9gQeIb+
>>450
ghci上でletするのと違って、hsファイルではletしたらinしないとダメ。
returnの前にin入れるよろし。
0463デフォルトの名無しさん2016/06/19(日) 10:02:38.64ID:U9gQeIb+
func1 :: Int -> IO (Int, Int)
func1 n = let
n' = func2 n
func2 n = n * 2 in
return (n, n')

letとか使い慣れてなかったからインデントエラーで手間取った^^;
returnは普通の関数(というか、do n <- getContentsもgetContents >>= n -> の構文糖衣なだけで、普通のモナド専用演算子だが)
0464デフォルトの名無しさん2016/06/19(日) 10:08:35.36ID:U9gQeIb+
あれ、¥が消えてる?
>>= n ->は
>>= の後にnを引数に取るラムダ式に訂正ね。
0465デフォルトの名無しさん2016/06/19(日) 10:16:10.21ID:U9gQeIb+
あと、文字コードを一旦Shift-JISにして、変なごみを取ってからghciに通すと良い。
0466デフォルトの名無しさん2016/06/19(日) 14:09:22.54ID:+Gq0sOtS
>>462
doの中のletって、inいらないんじゃなかったっけ?
0467デフォルトの名無しさん2016/06/19(日) 18:53:19.01ID:pXg+pklT
haskellを始めたいのですが、得意分野は何ですか?
人工知能でしょうか?
有名ソフトには何がありますか?
c#のラムダ式は好きです
0468デフォルトの名無しさん2016/06/19(日) 19:15:45.51ID:Z3K3Aq0Z
得意分野は普通のプログラミング
速度や低レイヤーを触りたいとかなら他の言語にしとけ
人工知能はpythonとかライブラリの揃ってていいんじゃないだろうか 知らんけど
0469デフォルトの名無しさん2016/06/19(日) 19:43:39.12ID:KC3RPfxA
昔はよくHaskellコンパイラを作るのが得意と揶揄されました
0470デフォルトの名無しさん2016/06/19(日) 21:06:24.60ID:XxQWN3nU
極超低温下で動くソフトウェアはHaskell以外選択肢が無いと聞きました。
0471デフォルトの名無しさん2016/06/20(月) 04:48:23.69ID:SIt1WX2P
Algorithm Wが再帰な型を無視するのは何故?
C++では普通に使うのに未定義になる
0472デフォルトの名無しさん2016/06/21(火) 12:29:55.40ID:/zCyXUk+
得意分野は普通のデフォルト
デフォルトの振舞いを批判する暇があったら対案を出せ
0473デフォルトの名無しさん2016/06/23(木) 06:48:52.26ID:Yp4/uj8T
yコンビネータで y (\ f x -> ...) と書けばfはlet多相ではないことを明示できる
0474デフォルトの名無しさん2016/06/23(木) 18:55:59.49ID:05qDBgT1
ふぇぇ。。。難解用語連発で何喋ってるか判らないよぅ。。。
0475デフォルトの名無しさん2016/06/25(土) 09:42:45.94ID:VirkFiI/
カリー化について質問があります。

add :: Int -> (Int -> Int)
add x y = x + y

今、ハットンの本を読んでいます。

add :: Int -> (Int -> Int)
のほうは意味がよくわかるのですが、

add x y = x + y
この表記法のがしっくりしません。

add : Z -> {f | f は Z から Z への写像}
add : x -> (f : Z ∋ y -> x + y ∈ Z)

なので、

(add(x))(y) = x + y

となるという意味かと思います。
0476デフォルトの名無しさん2016/06/25(土) 09:48:52.83ID:VirkFiI/
というか関数の書き方についての正式な定義がハットンの本には
ありません。

引数は1つしか取らないということでいいのでしょうか?
たとえば、

f x = ...

と書いた場合、
「=」は写像の対応を表す記号で、
x -> ...
という意味なのでしょうか?
0477デフォルトの名無しさん2016/06/25(土) 09:53:44.96ID:VirkFiI/
add x y = x + y

という表記法は普通の関数の表記法とは全く異なるかりー化された関数用
の全く新しい表記法という考えでOKでしょうか?
0478デフォルトの名無しさん2016/06/25(土) 09:54:40.72ID:mWRDlDK6
>>476

add x y = x + y



add = ¥x -> ( ¥y -> x + y )

の略記( ¥x -> … はラムダ式のリテラル)。
どうしても書きたきゃ1段階だけ略記して

add x = ¥y -> x + y

と書いても構わない(がそう書くのは見たことがない)。
0479デフォルトの名無しさん2016/06/25(土) 09:58:23.93ID:mWRDlDK6
あ〜もしかして、

f x

で関数 f を x に適用するという表記が腑に落ちてないのかしら。
関数型言語で関数適用をいちいちf(x)みたいにカッコつけて書いてると煩雑なので
空白それじたいが(左結合の)関数適用演算子であるかのように表記する慣習。
0480デフォルトの名無しさん2016/06/25(土) 09:59:48.64ID:RoCVjm19
f = \x -> h (g x)
f x = h (g x)
f = h . g

がすべて等価だったはず
0481デフォルトの名無しさん2016/06/25(土) 10:01:20.88ID:VirkFiI/
>>478

ありがとうございました。略記法なんですね。

add = \x -> ( \y -> x + y )

の正確な意味はまだわかりませんが、こっちのほうは意味がはっきり
わかります。
0482デフォルトの名無しさん2016/06/25(土) 10:05:25.94ID:mWRDlDK6
>>481
普通にラムダ式

λx.λy. x+y

のリテラル(表記法)ってだけ。
0483デフォルトの名無しさん2016/06/25(土) 10:06:47.68ID:VirkFiI/
>>478-480

ありがとうございました。

add x y = x + y

ハットンの本を読んでいて、カリー化が出てくるまでは、
関数は一つの引数しか取らないものしか出てきませんでした。

カリー化のところでいきなり x y という表記が出てきたの
でこれは何なのかと混乱してしまいました。タプルに似た
何かの型の要素なのかと思ったり。

略記法ということで納得しました。
ありがとうございました。
0484デフォルトの名無しさん2016/06/25(土) 10:09:33.66ID:N25pDoND
ポイントフリースタイルはしっくりするが、難解と言われるのが面倒臭い
0485デフォルトの名無しさん2016/06/25(土) 10:11:07.91ID:mWRDlDK6
>>483
関数適用演算子としての空白は左結合なんで
add x y はカッコを入れてわかりやすく書けば (add x) y のこと。
Haskellの関数はご推察通り一つの引数しか取らない(最初からカリー化されている)。
0486デフォルトの名無しさん2016/06/26(日) 17:11:33.57ID:gNzZf9B4
pred
subtract 1

Intの場合、両者は最適化でも効いて、全く同じコードになってくれますか?
後者は大袈裟なので前者を書きたい
0487デフォルトの名無しさん2016/06/26(日) 17:20:23.54ID:K7S4TdpP
Enumのデフォルト実装は

pred = toEnum . (subtract 1) . fromEnum

あとは自分で考えろ
0488デフォルトの名無しさん2016/06/26(日) 18:22:42.21ID:gNzZf9B4
むむむ…
id . subtract 1 . id

subtruct 1

では素人考えでは後者の方が速いように思えますが、もしかすると上が下に変換されるかも知れないので判んないです><
0489デフォルトの名無しさん2016/06/26(日) 18:56:11.33ID:fbaRfY1T
foldr がなぜ以下のようになっているのか分かりません。

foldr :: (a -> b -> b) -> b -> [a] -> b

以下では間違いなのでしょうか?
foldr :: (a -> a -> a) -> a -> [a] -> a
0490デフォルトの名無しさん2016/06/26(日) 18:58:18.40ID:fbaRfY1T
sum = foldr (+) 0
product = foldr (*) 1

などを考えると下でもいいような気がするんですが。
0491デフォルトの名無しさん2016/06/26(日) 19:18:28.21ID:K7S4TdpP
そんなことしたら

(:) :: a -> [a] -> [a]

みたいな関数をfoldrに渡せなくなるだろ
foldr で map 書こうとしてみればわかるよ
0492デフォルトの名無しさん2016/06/26(日) 19:23:57.64ID:gNzZf9B4
>>489
二項演算が同じ型同士限定である必然性に乏しいから
0493デフォルトの名無しさん2016/06/29(水) 07:04:16.86ID:r25iBQLU
必然性に乏しいものを信じないだけで、間違っているという確信があるわけではないな

確信がないのに偉そうなことを言ってると必然的に反感を買う
無神論が許されないという必然性
0494デフォルトの名無しさん2016/06/29(水) 08:38:27.16ID:3aYMqn0k
お、そうだな
0495デフォルトの名無しさん2016/06/30(木) 03:18:46.20ID:u1Y0HI53
例 文字列を数回くりかえして「???」でくくる関数

<???> :: Int -> String -> String
3 <???> hello = "???hellohellohello???"

foldr <???> hello [2,2,3] = "???hellohellohello??????hellohellohello??????hellohellohello??????hellohellohello???"

適当に考えてみた 間違ってたらごめん
0496デフォルトの名無しさん2016/06/30(木) 07:09:20.44ID:MCZcDeJz
(a -> b -> b) -> b -> [a] -> b
[a] -> (a -> b -> b) -> b -> b

Monoid m => [a] -> (a -> m) -> m
二項演算である必要がなかったので単項演算にする例です
0497デフォルトの名無しさん2016/07/02(土) 11:46:36.27ID:dEZ6Zi3t
モナドの良さって未だに分からん。
do記法が使えるから嬉しいってこと?
0498デフォルトの名無しさん2016/07/02(土) 15:29:55.10ID:1toMA/Of
良いから使うわけじゃないし嬉しいわけでもないよね
0499デフォルトの名無しさん2016/07/02(土) 15:30:33.06ID:Dac+6Yzz
Maybe使ってもわからなかったら諦めろ
0500デフォルトの名無しさん2016/07/02(土) 15:38:59.47ID:RwQxrqCZ
リストモナド使えない言語とか窓から投げ捨てるレベル
0501デフォルトの名無しさん2016/07/02(土) 20:47:59.70ID:M4B9OnE7
モナドは文脈

演算中、今何の話してんの?ってことをはっきりさせて余計なこと話そうとする奴を黙らせる

うっかり余計なこと話して脱線しないようにするシステム

ADHD矯正システム
0502デフォルトの名無しさん2016/07/03(日) 00:10:37.95ID:g/2Vj7Kl
文脈云々はバズワードだから嬉しくないが
バズワードを回避してまともな言葉が使えたらそれだけで嬉しい
0503デフォルトの名無しさん2016/07/03(日) 00:22:39.53ID:q98BxS4G
ただのプログラム可能なセミコロンだろ
0504デフォルトの名無しさん2016/07/03(日) 09:19:10.68ID:EfkUt+fo
f '@' "abcde" = ["@abcde", "a@bcde", "ab@cde", "abc@de", "abcd@e", "abcde@"]

こんな f って小さく書けますかね?
0505デフォルトの名無しさん2016/07/03(日) 09:44:07.94ID:33tWiWdT
f c str = f' c ("",str)
 where
  f' c (xs,[]) = [xs++[c]]
  f' c (xs,y:ys) = (xs++(c:y:ys)): f' c (xs++[y],ys)

これが小さいか大きいかは知らん
0506デフォルトの名無しさん2016/07/03(日) 09:55:09.62ID:kAyTm6a5
import Data.List (inits, tails)

f :: a -> [a] -> [[a]]
f v xs = zipWith ((++) . (++ [v])) (inits xs) (tails xs)

ただし f '@' "" = ["@"] となるが、これが望んだ結果なのかは知らん。
0507デフォルトの名無しさん2016/07/03(日) 09:57:26.96ID:33tWiWdT
f c str = splits [] c [] str
 where
  splits acc c xs [] = reverse $ (reverse (c:xs)):acc
  splits acc c xs (y:ys) = splits ((reverse (c:xs)++(y:ys)):acc) c (y:xs) ys

main = print $ f '@' "abcde"

末尾再帰にしたった
0508デフォルトの名無しさん2016/07/05(火) 23:11:56.42ID:teB4RGPK
メソッドチェーンみたいなことをやりたいのですが、Haskellではどうやればよいのでしょうか?
0509デフォルトの名無しさん2016/07/05(火) 23:26:50.28ID:sg2Iayfh
|>
0510デフォルトの名無しさん2016/07/06(水) 01:01:04.59ID:SGI4C5kx
hayooで a -> (a -> b) -> b 探しても名前ぜんぶバラバラやん
なぜ統一できんかったんや
0511デフォルトの名無しさん2016/07/06(水) 03:35:43.05ID:3LtpfHJl
import Data.Function ((&))
05125082016/07/06(水) 09:07:58.46ID:e+6hT/7h
すみません、よくわからないのでメソッドチェーンの具体的なコードを教えて下さい。
0513デフォルトの名無しさん2016/07/06(水) 11:03:34.97ID:3LtpfHJl
>>512

http://ideone.com/IXEJ23

各行にそれぞれ複数の数字が書かれたデータを標準入力から読み取って
全部の行の合計を出力する例
05145082016/07/07(木) 00:39:56.05ID:3l/TdPIo
>>513
ありがとうございます。
メソッドチェーン専用の関数みたいなものは無いんですね。

d3.selectAll("p").style("color", "white");
のようにメソッドチェーンの途中で引数を取る関数がある場合はHaskellではどう書くのでしょうか?
0515デフォルトの名無しさん2016/07/07(木) 07:24:10.29ID:2aQfBH7H
メソッドチェーンを使う科学的根拠がない
二項演算なら無駄な括弧がなくなることは客観的にわかるが
0516デフォルトの名無しさん2016/07/07(木) 07:35:43.00ID:LeKCeFlK
import Data.Function ((&))
d3 & selectAll “p” & style “color” “white”

他の言語で T1.method(T2,T3) (返値はR)みたいに書くものはHaskellだと
method :: T2 -> T3 -> T1 -> R という型を持つ普通の(カリー化)関数として書いて
関数適用や関数合成を連鎖させて書く

あと関数適用や関数合成は数学同様に右から左に連鎖させて書くのが普通で、
いわゆるメソッドチェーンのように左から右には書かない(モナドを除く)
>>513のようなものは

getContents >>= print.sum.map read.concat.map words.lines

が普通の書き方
0517デフォルトの名無しさん2016/07/07(木) 07:45:28.85ID:LeKCeFlK
あと、メソッドチェーンみたいな非本質的なもんは言語に組み込まずに
どうしてもやりたければライブラリでなんとかするのがHaskellでの普通の発想で、
実際に(関数合成演算子のドットを数学的からくりを駆使してメソッドチェーンの
ドットとして読めるようにしてしまうことで)それをしてるのが Lens パッケージ
0518デフォルトの名無しさん2016/07/08(金) 07:50:05.57ID:HHTq9Yfv
http://codeforces.com/problemset/problem/689/C

僕はアルゴリズムに、再帰呼び出しによるマージソートを選択しました
solve::Int -> [Int]
solve j = (1 `tbl` j):(merge (map (`tbl` j) [2..]) $ solve (j+1))

tbl i j = i*(j+1)^3

(mainとmergeは本質でないので省略)このルーチンでのぞんだ所、答えは正しいのですが大きなmに対してMLEでした。原因はリストを使ってるせいで、評価済みの要素はもう不要にも関わらず保持し続けてしまっているせいだと思い、
sweep (a,b) c = (b,c) という関数を作り、
foldl' sweep (undefined,undefined) $ take (m+1) $ solve 1
することで最後の2つの要素のペア(求める値とその次の値)を得て、途中になぞっていったリストの要素はガベッジコレクション可能になると期待しました。
結果、前回より二つテストを前進しましたがそこでやはりMLEでした。次の一手を教えてください
0519デフォルトの名無しさん2016/07/08(金) 08:51:31.05ID:6Zixlsju
単なる二分探索の問題に見えるのでそもそものアルゴリズム選択がまちがってるのでは…
0520デフォルトの名無しさん2016/07/08(金) 09:38:40.02ID:HHTq9Yfv
(´:ω;`)ウッ……有り難うございました
0521デフォルトの名無しさん2016/07/09(土) 10:23:30.04ID:6VbJAOZW
本質的なコードは4行くらいしか書いてないから捨てるというのも意外に良い手だよな
0522デフォルトの名無しさん2016/07/11(月) 08:51:48.39ID:/+kUKYFr
constについて教えてください。ghciで
const 'A' 'B'
->'A'

const 'A' undefined
->'A'
となりますが、例えば
const <$> Just 'A' <*> undefined
->*** Exception: Prelude.undefined

となります。この結果の違いが生じる理由は何なのでしょうか
0523デフォルトの名無しさん2016/07/11(月) 11:19:44.46ID:f8mQHfL+
fmapは中身に作用するからだろ
0524デフォルトの名無しさん2016/07/11(月) 18:34:09.29ID:AjHPC2UO
undefined :: Maybe Char の中からパターンマッチで
値を取り出して処理しようとする時点で例外を投げてる
<*> の第1数のモナドに包まれた関数が const だろうがなんだろうが
その関数の評価の前に<*> の第2引数の評価が生じるのでそうなる
0525デフォルトの名無しさん2016/07/11(月) 18:42:28.43ID:AjHPC2UO
あ、すまん undefined はChar 特化じゃなくて多相だわ
多相性を端折ってMaybeに特化して敢えて再発明すると

<*> :: Maybe (a->b) -> Maybe a -> Maybe b
mf <*> mv = case (mf,mv) of
 (Just f, Just v) -> Just (f v)
 (Nothing, _) -> Nothing
 (_, Nothing) -> Nothing

みたいになってて、undefined 値をパターンマッチしようとして例外投げてる(たぶん)
0526デフォルトの名無しさん2016/07/12(火) 12:41:57.06ID:eYeWW2L8
fmap constじゃなくてbimap id constと思えば、constの性質は半分しか残ってない
0527デフォルトの名無しさん2016/07/20(水) 10:25:34.27ID:VWk1kGFj
>>501
>モナドは文脈
>>503
>ただのプログラム可能なセミコロンだろ

そんなのでモナドが分かるわけないだろ
自分でも分かってないだろ
そもそも受け売りじゃなく自分の言葉で言え
0528デフォルトの名無しさん2016/07/20(水) 10:38:06.92ID:oWJ56nOj
定義があるものに対して独自の言い回しに変更するのは数学的にはどちらかというと筋が悪い。
モナド則を満たせば何であれそれはモナドだし、それ以外に説明する言葉などない。
それがどのように便利なのかということと、モナドが何者であるかを混同するのはよくない。
0529デフォルトの名無しさん2016/07/20(水) 11:46:05.72ID:VWk1kGFj
>>528
誰に対して言ってるのか分からんが、
あんたは501,503にも及ばない単なる機械か石ころだな
定義を読んでるだけで、定義を理解したり、定義を作ったりしたことがないだろ
0530デフォルトの名無しさん2016/07/20(水) 16:40:29.10ID:HQM16vFt
最初はインスタンスの型だけを見ろ
モナドクラスとモナド則と数学は後で勉強しろ
この順序を間違えなければ理解できると思う
0531デフォルトの名無しさん2016/07/21(木) 11:25:19.65ID:jJzdCE8w
最近はARで見えない情報を可視化するのが正義
抽象化や情報隠蔽は時代に逆行している
0532デフォルトの名無しさん2016/07/23(土) 05:36:08.80ID:zdmgkc+M
言われてみると確かにポケモン流行ってるな
0533デフォルトの名無しさん2016/07/25(月) 12:51:34.33ID:IZp+OdY9
stack で build コマンドや test コマンドを実行する際に、cabalファイルが参照され、
build-depends に列挙されたパッケージが未インストールなら自動手にインストールされますが、
このとき、コマンドのオプションとして --haddock オプションを付ければライブラリドキュメントも構築されます。

わたしの場合は、パッケージのインストールの際はいつでもドキュメントも作られてほしいのですが、
毎回このオプションをつけるのは煩わしいです。

stack ではなく cabal だけでインストールやビルドしていたときは、
$HOME/.cabal/config ファイルの documentation を True にしておけば動的にドキュメントが作られました。

stack でも同じように自動的にドキュメントが作られるようにするにはどうすれば良いでしょうか。
0534デフォルトの名無しさん2016/07/25(月) 15:07:37.73ID:0y8CzYDs
~/.stack/config.yaml

build:
haddock: true
でできるように(我らがヒーロー)chrisdoneさんがしてくれたみたい。
0535デフォルトの名無しさん2016/07/25(月) 20:43:22.58ID:IZp+OdY9
>>534
ありがとうございます。
できました。


ところで、HsColour へのパスを通し忘れていたみたいで、
インストールされたライブラリドキュメントの各関数にソースへのリンクが張られていません。

stack でドキュメントを強制的に上書きで再インストールする方法はあるでしょうか。
0536デフォルトの名無しさん2016/07/25(月) 22:52:02.75ID:0y8CzYDs
>>535
調べたけど簡単な方法はわかんなかった。手で削除して一つ一つをリビルドするしかないのかも。
イマイチ自信がないから注意してほしいんだけど、例えばこんな風にやります...

まず、ドキュメントのインストール先を調べる。
$ stack path | grep "doc"
snapshot-doc-root: /path/to/snapshot/doc
local-doc-root: /path/to/local/doc

二つのディレクトリのどっちかに入ってるかわかったら、
例えばsnapshotの方なら、そのディレクトリの中身を削除する。
$ rm -rf `stack path --snapshot-doc-root`/*

その後でhaddockを再構築する。
$ stack exec -- ghc-pkg list --package-db=`stack path --snapshot-pkg-db` --simple-output | xargs -n 1 stack haddock
0537デフォルトの名無しさん2016/07/27(水) 18:59:54.20ID:p304Zd6v
>>536
念のためバックアップをとってから試しましたが、うまくできました。
今のところ特に問題は見つかっていません。

ありがとうございました。
0538デフォルトの名無しさん2016/07/29(金) 23:39:42.61ID:MRKaDYWC
Data.Text.Arrayは廃止されたのですか? どこのモジュールに統合されたのですか?
Haskell Platform 2014.2.0.0で標準ライブラリだったのですが。
equal, new, unsafeWrite, run が使えなくて困っています
0539デフォルトの名無しさん2016/07/30(土) 00:41:53.51ID:FdhqaNGk
>>538
textパッケージの中にありますよ
https://hackage.haskell.org/package/text-1.2.2.1/docs/Data-Text-Array.html
0540デフォルトの名無しさん2016/07/30(土) 01:08:24.92ID:e3eNfr/7
標準から外されたんですか…、競プロで使えないや〜残念
0541デフォルトの名無しさん2016/08/06(土) 13:44:41.15ID:AFiBfwTx
yesodで仕事したい人ってどれくらいいるのかしら
0542デフォルトの名無しさん2016/08/10(水) 20:45:06.76ID:8Ulk+XDX
おしえてジェネラル @oshiete_general

これか。日銀は9月会合のドラフトを作成しており、「総括」でも2%のインフレ目標は維持と。

ttp://www.reuters.com/article/us-japan-economy-boj-idUSKCN10L13A
0543デフォルトの名無しさん2016/08/11(木) 18:25:10.90ID:3hGYSwfG
今自サーバを立ててる人いるのかな
0544デフォルトの名無しさん2016/08/12(金) 00:39:34.68ID:XbNuNDlJ
HaskellのBase PackageはライセンスがBSD3になってるけど

競プロでHaskell使う場合、競プロだとソースコード1ファイル提出が多いから
ソースコード内にBase Packageのライセンサーの名前を付記しておけばおk?

base: Basic libraries
http://hackage.haskell.org/package/base-4.9.0.0

http://hackage.haskell.org/package/base-4.9.0.0/src/LICENSE
0545デフォルトの名無しさん2016/08/12(金) 00:43:24.62ID:XbNuNDlJ
あ、BSD3は宣伝条項(?)というのが無くて書かなくていい感じ?
■ このスレッドは過去ログ倉庫に格納されています