関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
探検
関数型プログラミング言語Haskell Part33
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/10(月) 18:17:36.49ID:L6eYQqyh782デフォルトの名無しさん
2021/03/22(月) 13:52:42.80ID:gNDsQT3i >>777
graph refuctionですか
調べてみます
しかしともかく、じゃあGHCとかではどう実装されてるのかとかいう資料はかなりの割合で結局カリーハワード対応使ってる文献しか出てこないのがなんとも
当面は“やってみる”でやり過ごすしかなさそうです
graph refuctionですか
調べてみます
しかしともかく、じゃあGHCとかではどう実装されてるのかとかいう資料はかなりの割合で結局カリーハワード対応使ってる文献しか出てこないのがなんとも
当面は“やってみる”でやり過ごすしかなさそうです
783デフォルトの名無しさん
2021/03/22(月) 15:09:38.98ID:UycYSiaC call by name(仮)の正式名称がgraph reductionだったら
カリーハワード対応(仮)にも正式名称がありそうだけど
訂正することで利益が出せるようにならなければ正式名称の価値も分からん
カリーハワード対応(仮)にも正式名称がありそうだけど
訂正することで利益が出せるようにならなければ正式名称の価値も分からん
784デフォルトの名無しさん
2021/03/22(月) 19:37:04.72ID:TV/B7jf8 >>782
私にはむしろカリーハワード同型対応を陽には使っていない資料しか見当たらないです。
検索キーワードや調べ方が違うのかもしれませんね。
(カリーハワード同型対応がさす意味がお互いに違っている可能性もありますが)
この資料はどうでしょうか。
遅延評価をする関数型言語一般の実装方法です。
https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987.pdf
私にはむしろカリーハワード同型対応を陽には使っていない資料しか見当たらないです。
検索キーワードや調べ方が違うのかもしれませんね。
(カリーハワード同型対応がさす意味がお互いに違っている可能性もありますが)
この資料はどうでしょうか。
遅延評価をする関数型言語一般の実装方法です。
https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987.pdf
785デフォルトの名無しさん
2021/03/22(月) 20:29:59.10ID:UycYSiaC 例えばmonomorphism restrictionとかいうアレだったら
実行時の挙動ではなく型の話になるんじゃないか
実行時の挙動ではなく型の話になるんじゃないか
786デフォルトの名無しさん
2021/03/23(火) 01:01:29.12ID:HzbeYy7B >>784
ありがとうございます
十章ですね
今度時間を見つけて読んでみます
そうですね
やっぱり私はGHC関連の資料をあたる事が多くて、やはりそこでは数学よりの資料が多いんでしょうね
でもやはりcall by needの実装方法はHaskellのレギュレーションには含まれていない実装依存のところなのでGHC userの私はどうしてもGHC関連の資料から当たりたくなってしまいます
GHCでのインプリメントは最新の成果が全て反映されてるとは限らないし、あるいはあまり一般的でない手法を用いているかもしれないし、そこはGHCそのものの資料が一番頼りになります
ただ一つの問題はあまりにも数学村(の計算論畑)の言葉で書かれててサッパリわからんとこorz
ありがとうございます
十章ですね
今度時間を見つけて読んでみます
そうですね
やっぱり私はGHC関連の資料をあたる事が多くて、やはりそこでは数学よりの資料が多いんでしょうね
でもやはりcall by needの実装方法はHaskellのレギュレーションには含まれていない実装依存のところなのでGHC userの私はどうしてもGHC関連の資料から当たりたくなってしまいます
GHCでのインプリメントは最新の成果が全て反映されてるとは限らないし、あるいはあまり一般的でない手法を用いているかもしれないし、そこはGHCそのものの資料が一番頼りになります
ただ一つの問題はあまりにも数学村(の計算論畑)の言葉で書かれててサッパリわからんとこorz
787デフォルトの名無しさん
2021/03/23(火) 03:42:25.12ID:VKgh9sH5 >>786
余計なお世話だとは思いますが、どの章もその前までの章の積み重ねなので、
第10章だけを読んで理解するのは難しいと思います。
かなり古い資料を提示したのは、基礎の基礎から学んだ方が良いと思ったからです。
この資料は本当に分かりやすく基礎から説明されているので、
急がば回れの精神で、腰を据えてじっくりと学んでみることをお勧めします。
それこそ数ヶ月かけて。
なんかこう、数学で例えるなら、集合論や解析学の基礎があやふやなまま、
位相空間論の必要な部分だけを都合よく学ぼうとしているような、
そんなきらいがあるように見えます。
余計なお世話だとは思いますが、どの章もその前までの章の積み重ねなので、
第10章だけを読んで理解するのは難しいと思います。
かなり古い資料を提示したのは、基礎の基礎から学んだ方が良いと思ったからです。
この資料は本当に分かりやすく基礎から説明されているので、
急がば回れの精神で、腰を据えてじっくりと学んでみることをお勧めします。
それこそ数ヶ月かけて。
なんかこう、数学で例えるなら、集合論や解析学の基礎があやふやなまま、
位相空間論の必要な部分だけを都合よく学ぼうとしているような、
そんなきらいがあるように見えます。
788デフォルトの名無しさん
2021/03/23(火) 05:16:41.87ID:EMfQwUjX そうですか
残念ながら当方計算論はウルマンホップクラフトや西岡先生の教科書しか読んだことないのでかなり知識が数学サイドに寄ってます
仕事もかなり数学よりで計算論はあくまで趣味なのであまり本腰入れて勉強したことはないのでもしかしたら専門に勉強されてる方から見ればそうかもしれません
まぁ本職に悪影響与えない範囲で時間見つけてボチボチ勉強します
残念ながら当方計算論はウルマンホップクラフトや西岡先生の教科書しか読んだことないのでかなり知識が数学サイドに寄ってます
仕事もかなり数学よりで計算論はあくまで趣味なのであまり本腰入れて勉強したことはないのでもしかしたら専門に勉強されてる方から見ればそうかもしれません
まぁ本職に悪影響与えない範囲で時間見つけてボチボチ勉強します
789デフォルトの名無しさん
2021/03/23(火) 07:32:33.02ID:e41TIwig はっきり言うと評価戦略だとか推論規則だとかカリーハワード同型対応だとかの話は、まともな情報系の学部なら習う基礎基本
大学の講義資料が易しいと思われ
大学の講義資料が易しいと思われ
790デフォルトの名無しさん
2021/03/23(火) 20:57:46.65ID:zFHE0Fu5 情報系とかいう言い方をする奴は言語から逃げてるね
「数学村の言葉で書かれ」た資料が存在するのも
C言語で書かれたOSの話をしないのも
言語から逃げた結果じゃないかな
「数学村の言葉で書かれ」た資料が存在するのも
C言語で書かれたOSの話をしないのも
言語から逃げた結果じゃないかな
791デフォルトの名無しさん
2021/03/24(水) 19:34:45.53ID:8SYKHDut 何言ってんだコイツ…
792デフォルトの名無しさん
2021/03/26(金) 00:15:16.59ID:sjuSPGcx カリー・ハワード同型対応はこのスライドが分かり易かった
結局なんで上手く行くのかって良く分かってないのね
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward.pdf
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward2.pdf
結局なんで上手く行くのかって良く分かってないのね
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward.pdf
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward2.pdf
793デフォルトの名無しさん
2021/04/05(月) 18:23:16.33 関数の名前が被るとき、このモジュールのそれだと修飾しますが、
今書いてる翻訳単位のそれだと伝えるには今書いてるモジュール名で修飾するしかないのですか?
それが長大な場合惨めな気持ちになります
qualified 今書いているモジュール名 as 短い名前
にするような事はできないのですか?
今書いてる翻訳単位のそれだと伝えるには今書いてるモジュール名で修飾するしかないのですか?
それが長大な場合惨めな気持ちになります
qualified 今書いているモジュール名 as 短い名前
にするような事はできないのですか?
794デフォルトの名無しさん
2021/04/05(月) 21:28:27.96ID:DOv0Oh8v idrisを使った型駆動設計の話を聞いて、凄いなぁと思いました。
でもこの型駆動設計って、依存型が開発言語のあるのが前提の方法なんでしょうか?
でもこの型駆動設計って、依存型が開発言語のあるのが前提の方法なんでしょうか?
795デフォルトの名無しさん
2021/04/05(月) 22:48:33.31ID:RKVG1ya/ >>793
今書いている翻訳単位で import しているモジュールを qualified で装飾すれば、
今書いている翻訳単位内で定義している同名の関数は修飾せずとも使えると思うのですが、どうですか?
module Main where
import qualifued Data.List as L
transpose :: (Int, Int) -> (Int, Int)
transpose (x, y) = (y, x)
main :: IO ()
main = do
let a = L.transpose [[1, 2], [3, 4]]
let b = transpose (1, 2)
putStrLn $ show a ++ " / " ++ show b
今書いている翻訳単位で import しているモジュールを qualified で装飾すれば、
今書いている翻訳単位内で定義している同名の関数は修飾せずとも使えると思うのですが、どうですか?
module Main where
import qualifued Data.List as L
transpose :: (Int, Int) -> (Int, Int)
transpose (x, y) = (y, x)
main :: IO ()
main = do
let a = L.transpose [[1, 2], [3, 4]]
let b = transpose (1, 2)
putStrLn $ show a ++ " / " ++ show b
796デフォルトの名無しさん
2021/04/06(火) 12:32:00.21 >>795
値コンストラクタ名に被りがあった場合、それができないようなのです
import モジュールの側の同名値コンストラクタを、qualifiedして修飾しましたので今書いてるモジュールの方を修飾なしで書いたのですが
それはAmbiguousだと怒られます
値コンストラクタ名に被りがあった場合、それができないようなのです
import モジュールの側の同名値コンストラクタを、qualifiedして修飾しましたので今書いてるモジュールの方を修飾なしで書いたのですが
それはAmbiguousだと怒られます
797デフォルトの名無しさん
2021/04/06(火) 20:13:47.61ID:sYlI8eNJ ホントだ
怒られた
import qualified Data.Bool as B
data MyBool = True | False
instance Show MyBool where
show Main.True = "MyTrue"
show Main.False = "MyFalse"
main = do
print B.True
print Main.True
--print True ←ダメだって
怒られた
import qualified Data.Bool as B
data MyBool = True | False
instance Show MyBool where
show Main.True = "MyTrue"
show Main.False = "MyFalse"
main = do
print B.True
print Main.True
--print True ←ダメだって
798デフォルトの名無しさん
2021/04/06(火) 20:14:29.60ID:VZ4U19ap そりゃそうでしょうよ・・
799デフォルトの名無しさん
2021/04/06(火) 20:30:15.84ID:O0PfwEM6 曖昧さ無く無い?なんでダメなんだっけ
800デフォルトの名無しさん
2021/04/06(火) 20:31:09.67ID:xR67cG4d Prelude が暗黙的に居るから?
801デフォルトの名無しさん
2021/04/06(火) 21:08:36.42ID:sYlI8eNJ802デフォルトの名無しさん
2021/04/06(火) 22:30:07.58ID:sYlI8eNJ いや>>800さんの言う通りだったかな?
コレ↓は通る
BoolがダメだったのはPreludeで読んでたからだな
ちゃんと修飾なしの場合Main moduleのコンストラクタが選ばれてる
import qualified System.Exit as S
data MyExitCode = ExitSuccess | ExitFailure Int
instance Show MyExitCode where
show ExitSuccess = "MyExitSuccess"
show ( ExitFailure x ) = "MyExitFailure " ++ ( show x )
main = do
print ExitSuccess
print S.ExitSuccess
print $ ExitFailure 12
print $ S.ExitFailure 12
コレ↓は通る
BoolがダメだったのはPreludeで読んでたからだな
ちゃんと修飾なしの場合Main moduleのコンストラクタが選ばれてる
import qualified System.Exit as S
data MyExitCode = ExitSuccess | ExitFailure Int
instance Show MyExitCode where
show ExitSuccess = "MyExitSuccess"
show ( ExitFailure x ) = "MyExitFailure " ++ ( show x )
main = do
print ExitSuccess
print S.ExitSuccess
print $ ExitFailure 12
print $ S.ExitFailure 12
803デフォルトの名無しさん
2021/04/06(火) 22:52:08.72ID:vUIEomdt >>796
エラーメッセージは省略せずに書いてほしい
エラーメッセージは省略せずに書いてほしい
804デフォルトの名無しさん
2021/04/07(水) 15:24:37.74 module BinaryRepresentation.Word8 (
BiRep8( Rep)
)
where
import Data.Word( Word8)
newtype BiRep8 = Rep Word8
instance Show BiRep8 where
show a = show' 8 a ""
where
show' 0 _ s = s
show' count (Rep w8) s =
let
(q,r) = w8 `quotRem` 2
in
show' (count-1) (Rep q) (r `shows` s)
---------↑binary_representation8.hs-----------------------------
BiRep8( Rep)
)
where
import Data.Word( Word8)
newtype BiRep8 = Rep Word8
instance Show BiRep8 where
show a = show' 8 a ""
where
show' 0 _ s = s
show' count (Rep w8) s =
let
(q,r) = w8 `quotRem` 2
in
show' (count-1) (Rep q) (r `shows` s)
---------↑binary_representation8.hs-----------------------------
805デフォルトの名無しさん
2021/04/07(水) 15:24:59.63 module BinaryRepresentation.IPAddress(
IPv4Address,
BiRepIPv4Address( Rep),
makeIPv4
) where
import Data.Word( Word8)
import Data.List( intersperse)
import BinaryRepresentation.Word8( BiRep8( Rep))
import qualified BinaryRepresentation.Word8 as Bi8
newtype IPv4Address = A (Word8, Word8, Word8, Word8)
ipshow::Show s=> (Word8->s) -> [Word8] -> String
ipshow f list = concat . intersperse "." $ (show . f) <$> list
instance Show IPv4Address where
show (A (_1,_2,_3,_4)) = ipshow id [_1,_2,_3,_4]
newtype BiRepIPv4Address = Rep IPv4Address
instance Show BiRepIPv4Address where
show (Rep (A (_1,_2,_3,_4)))
=
ipshow Bi8.Rep [_1,_2,_3,_4]
makeIPv4::Word8 -> Word8 -> Word8 -> Word8 -> IPv4Address
makeIPv4 _1 _2 _3 _4 = A (_1, _2, _3, _4)
-----------↑binary_representation_ipv4.hs------------------------
IPv4Address,
BiRepIPv4Address( Rep),
makeIPv4
) where
import Data.Word( Word8)
import Data.List( intersperse)
import BinaryRepresentation.Word8( BiRep8( Rep))
import qualified BinaryRepresentation.Word8 as Bi8
newtype IPv4Address = A (Word8, Word8, Word8, Word8)
ipshow::Show s=> (Word8->s) -> [Word8] -> String
ipshow f list = concat . intersperse "." $ (show . f) <$> list
instance Show IPv4Address where
show (A (_1,_2,_3,_4)) = ipshow id [_1,_2,_3,_4]
newtype BiRepIPv4Address = Rep IPv4Address
instance Show BiRepIPv4Address where
show (Rep (A (_1,_2,_3,_4)))
=
ipshow Bi8.Rep [_1,_2,_3,_4]
makeIPv4::Word8 -> Word8 -> Word8 -> Word8 -> IPv4Address
makeIPv4 _1 _2 _3 _4 = A (_1, _2, _3, _4)
-----------↑binary_representation_ipv4.hs------------------------
806デフォルトの名無しさん
2021/04/07(水) 15:25:15.94 [2 of 2] Compiling BinaryRepresentation.IPAddress ( binary_representation_ipv4.hs, binary_representation_ipv4.o )
binary_representation_ipv4.hs:24:11: error:
Ambiguous occurrence ‘Rep’
It could refer to
either ‘BinaryRepresentation.Word8.Rep’,
imported from ‘BinaryRepresentation.Word8’ at binary_representation_ipv4.hs:8:36-47
or ‘BinaryRepresentation.IPAddress.Rep’,
defined at binary_representation_ipv4.hs:21:28
|
24 | show (Rep (A (_1,_2,_3,_4)))
| ^^^
------------------------------------------------
意図:Word8 値を01表記で表現するモジュールを作り、それを用いてIPv4アドレスを01表記で表現する
問題:binary_representation_ipv4.hs のRepが、binary_representation8.hs のRepと被りAmbiguousである
判明しているワークアラウンド:24行目のRep を BinaryRepresentation.IPAddress.Rep という糞ダサコードへ書き換える
望む事:修飾せずに済ますか、短い修飾で済ませたい
binary_representation_ipv4.hs:24:11: error:
Ambiguous occurrence ‘Rep’
It could refer to
either ‘BinaryRepresentation.Word8.Rep’,
imported from ‘BinaryRepresentation.Word8’ at binary_representation_ipv4.hs:8:36-47
or ‘BinaryRepresentation.IPAddress.Rep’,
defined at binary_representation_ipv4.hs:21:28
|
24 | show (Rep (A (_1,_2,_3,_4)))
| ^^^
------------------------------------------------
意図:Word8 値を01表記で表現するモジュールを作り、それを用いてIPv4アドレスを01表記で表現する
問題:binary_representation_ipv4.hs のRepが、binary_representation8.hs のRepと被りAmbiguousである
判明しているワークアラウンド:24行目のRep を BinaryRepresentation.IPAddress.Rep という糞ダサコードへ書き換える
望む事:修飾せずに済ますか、短い修飾で済ませたい
807デフォルトの名無しさん
2021/04/07(水) 15:51:36.65ID:6KWn3Zlg import BinaryRepresentation.Word8( BiRep8( Rep))
↑これ何?消せば?
↑これ何?消せば?
808デフォルトの名無しさん
2021/04/07(水) 18:16:48.26 はわわ。。。通りました
下手にimport書いたせいで通らなくなるとかあるんですね
蛇足importと名付けて教訓にします。ありがとうございました
下手にimport書いたせいで通らなくなるとかあるんですね
蛇足importと名付けて教訓にします。ありがとうございました
809デフォルトの名無しさん
2021/04/07(水) 23:07:15.55ID:PA0bBjRm >>808
勘でコード書いてるのかよw
勘でコード書いてるのかよw
810デフォルトの名無しさん
2021/04/13(火) 20:07:55.95ID:WnmkLZut811デフォルトの名無しさん
2021/04/16(金) 21:11:12.10ID:trr1lKH1 "http2" library v3.0.0 in Haskell has been released
812デフォルトの名無しさん
2021/04/16(金) 21:38:11.49ID:gUR6Epkt >>794
型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな?
であれば予想してるように依存型前提よ
パターンマッチはデータ構築子に沿って分解してるだけだから
(x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう
IDEにコード生成させましょう
とかって大変楽しい本だった
型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな?
であれば予想してるように依存型前提よ
パターンマッチはデータ構築子に沿って分解してるだけだから
(x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう
IDEにコード生成させましょう
とかって大変楽しい本だった
813デフォルトの名無しさん
2021/04/17(土) 18:14:21.16ID:+4ymujjn リストを使って漸化式
r_n = max_{1 <= i < n} (p_i + r_{n-i}), r_0 = 0
を解くプログラムを書いたのですがリストをArrayに変えたとたん動かなくなりました
どうやらmax'にifが使われているのが原因のようなのですが動かなくなる理由が分かりません
どなたか分かる方いますか?
プログラムは以下の通りです
import Data.Array
p = [1,5,8,9,10,17,17,20,24,30]
max' (i,q) (i',q') = if q < q' then (i',q') else (i,q)
solver p = array (0,length p) $ (0,0):[ -- 動かない
foldr1 max' [(i, p !! (i-1) + rs ! (j-i)) | i <- [1..j]]
| j <- [1..length p]
] where rs = solver p
solver' p = (0,0):[ -- 動く
foldr1 max' [(i, p !! (i-1) + (snd $ rs' !! (j-i))) | i <- [1..j]]
| j <- [1..length p]
] where rs' = solver' p
r_n = max_{1 <= i < n} (p_i + r_{n-i}), r_0 = 0
を解くプログラムを書いたのですがリストをArrayに変えたとたん動かなくなりました
どうやらmax'にifが使われているのが原因のようなのですが動かなくなる理由が分かりません
どなたか分かる方いますか?
プログラムは以下の通りです
import Data.Array
p = [1,5,8,9,10,17,17,20,24,30]
max' (i,q) (i',q') = if q < q' then (i',q') else (i,q)
solver p = array (0,length p) $ (0,0):[ -- 動かない
foldr1 max' [(i, p !! (i-1) + rs ! (j-i)) | i <- [1..j]]
| j <- [1..length p]
] where rs = solver p
solver' p = (0,0):[ -- 動く
foldr1 max' [(i, p !! (i-1) + (snd $ rs' !! (j-i))) | i <- [1..j]]
| j <- [1..length p]
] where rs' = solver' p
814デフォルトの名無しさん
2021/04/17(土) 18:16:48.86ID:+4ymujjn 動かないと言うのはghciに入力すると結果がいつまで経っても出力されない状況を指します
815デフォルトの名無しさん
2021/05/09(日) 10:31:13.12ID:y0UqG5zB なんでみんなhaskellでアプリ作らないの?
816デフォルトの名無しさん
2021/05/09(日) 13:13:30.99 すいません、Microsoft TrueSkill レーティングシステムのHaskell実装を探しているのですが見つかりません
イロレーティングとグリコレーティングしかありません
TrueSkillを実装したライブラリを知ってる方がいたら教えてください
イロレーティングとグリコレーティングしかありません
TrueSkillを実装したライブラリを知ってる方がいたら教えてください
817デフォルトの名無しさん
2021/05/09(日) 22:22:49.79ID:HZ/HWpqa Haskellでアプリ作ろうにもopenglくらいしかまともなバインディングないんじゃなかったっけ?
じぶんでラップするのだるいし
おれはもうf#で作ることにしたよ
じぶんでラップするのだるいし
おれはもうf#で作ることにしたよ
818デフォルトの名無しさん
2021/05/09(日) 22:24:00.80ID:HZ/HWpqa あ、デスクトップアプリのことだと思ってたけど違うんかね
819デフォルトの名無しさん
2021/05/10(月) 00:08:10.35ID:fW0+gsWX パターンマッチでRustみたいに
match x {
Some(SeqCst)=>true,
Some(Relaxed)=>true,
_=>false
}
を
match x {
Some(SeqCst|Relaxed)=>true,
_=>false
}
って感じで書く方法ってある?
match x {
Some(SeqCst)=>true,
Some(Relaxed)=>true,
_=>false
}
を
match x {
Some(SeqCst|Relaxed)=>true,
_=>false
}
って感じで書く方法ってある?
820デフォルトの名無しさん
2021/05/10(月) 05:06:07.73ID:XvUHL9Z9 haskellでmatchってあるの?
821デフォルトの名無しさん
2021/05/11(火) 11:45:43.79ID:cKOIjnA7 >>820
標準ライブラリにはないけどhackageとかにはある
https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html
解説も転がってる
https://sirocco.hatenadiary.org/entry/20090416/1239852340
標準ライブラリにはないけどhackageとかにはある
https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html
解説も転がってる
https://sirocco.hatenadiary.org/entry/20090416/1239852340
822デフォルトの名無しさん
2021/05/11(火) 11:48:38.64ID:cKOIjnA7 あ、matchって正規表現のmatchじゃなくて?
質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
823デフォルトの名無しさん
2021/05/11(火) 11:53:57.18ID:+XHXxVLE すまん自己解決したわ
or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい
https://gitlab.haskell.org/ghc/ghc/-/issues/3919
or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい
https://gitlab.haskell.org/ghc/ghc/-/issues/3919
824デフォルトの名無しさん
2021/05/14(金) 16:46:12.69 時期に ARM CPUを載せた端末で 走る Haskell 製ソフトを公式に吐き出せるようになるんです?
825デフォルトの名無しさん
2021/05/15(土) 10:53:50.63ID:NqYfkIUy CPUとHaskellって
まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
826デフォルトの名無しさん
2021/05/15(土) 11:35:40.38ID:DozosAnh たとえばC言語習いたての難しいと思う理由は、
コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて
そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること
代数的なHaskewllがデフォならすんなり学習できるかもな
逆に今はCに適応しすぎてHaskellに苦労する
コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて
そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること
代数的なHaskewllがデフォならすんなり学習できるかもな
逆に今はCに適応しすぎてHaskellに苦労する
827デフォルトの名無しさん
2021/05/15(土) 12:48:56.18ID:NqYfkIUy828デフォルトの名無しさん
2021/05/21(金) 15:54:58.85 長く時間がかかるプログラムを走らせた時、タスクマネージャーを眺めると、少数のコアに高負荷、残り全コアに低負荷がかかってるみたいなのですが
実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
829デフォルトの名無しさん
2021/05/22(土) 13:34:14.84ID:hkOb3/u2 Haskellのは単にシングルスレッドで回収してるだけだぞ
830デフォルトの名無しさん
2021/05/22(土) 20:46:21.69 え、じゃあなんで全コア低負荷になったんだろ・・・
数分毎に階段のようにRAM使用量が数GBずつ増えて行って
長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから
ガベコレが関与してると思ったんですがね
数分毎に階段のようにRAM使用量が数GBずつ増えて行って
長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから
ガベコレが関与してると思ったんですがね
831デフォルトの名無しさん
2021/05/22(土) 21:35:55.30ID:aaz7cUPO サンクが溜まってって最後に遅延してそれらを評価したのでは
というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
832デフォルトの名無しさん
2021/05/22(土) 21:58:08.22ID:Up5XEM4X ガベコレ以外に考えられる原因が2つぐらいあったら
ガベコレが原因である確率は1/3ぐらいだから
2/3の方が勝ちそう
ガベコレが原因である確率は1/3ぐらいだから
2/3の方が勝ちそう
833デフォルトの名無しさん
2021/05/29(土) 14:13:39.92ID:SnGl3AHf win10でstackとかghcそのものは正常に入るんたけどパッケージのコンパイルが絡んでくるとどうも文字コードが原因でコケる
LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
834デフォルトの名無しさん
2021/05/29(土) 16:46:49.24ID:1zrkc3qO 100万要素の配列の1要素を更新するために配列の再作成が必要?
https://www.quora.com/Is-Haskell-as-fast-as-C++-If-not-why-not/answer/James-Hollis-19
> Haskell naturally operates on lists, but is rather awkward with arrays. Pure functions do not modify their input, so a pure function that changes one element of a million element array will copy 999,999 elements into a second array and return that. You can get around this with monads, but you end up writing imperative code in something that is less flexible than real imperative code.
これをモナドとアクションで解決できる?どうやるのか?
https://www.quora.com/Is-Haskell-as-fast-as-C++-If-not-why-not/answer/James-Hollis-19
> Haskell naturally operates on lists, but is rather awkward with arrays. Pure functions do not modify their input, so a pure function that changes one element of a million element array will copy 999,999 elements into a second array and return that. You can get around this with monads, but you end up writing imperative code in something that is less flexible than real imperative code.
これをモナドとアクションで解決できる?どうやるのか?
835デフォルトの名無しさん
2021/05/30(日) 20:49:58.16ID:QwiNWDL1 STArrayなりMutable Vectorなり使えば良いのでは
836デフォルトの名無しさん
2021/05/30(日) 22:25:02.60ID:F1Ogq3BP Unsafe でok
所詮物理的にはハードウェア上で動いてるのだから、
副作用なしなんてただの幻想よ
所詮物理的にはハードウェア上で動いてるのだから、
副作用なしなんてただの幻想よ
837デフォルトの名無しさん
2021/05/31(月) 09:29:30.68ID:O6iiWxP2 副作用の意味を勘違いしていないといいのだけれど・・・
838デフォルトの名無しさん
2021/05/31(月) 10:43:40.87ID:xvi5eoqv Rustと同じように、どうにかして型を弱くすれば副作用は好きなだけ使えるよ
839デフォルトの名無しさん
2021/06/01(火) 02:01:57.33ID:4I1ndF8a IOモナドやSTモナドの中でファイル操作したり現在時刻取って来たりしても問題無いわけだしわざわざ型犠牲にしなくても良いんじゃない
840デフォルトの名無しさん
2021/06/01(火) 10:15:13.07ID:UuHFoCEt 書き方が何通りもあってコンパイルが通るのは客観的事実だよ
そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが
コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが
コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
841デフォルトの名無しさん
2021/06/01(火) 22:12:35.15ID:HETOiJgb 自然に書いたhaskellコードが極端に遅いという2018年の記事
https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
842デフォルトの名無しさん
2021/06/03(木) 20:42:08.53ID:/+9iJa2F >>833
自己解決
language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい
誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた
まぁそりゃそうなんだけどさ...
自己解決
language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい
誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた
まぁそりゃそうなんだけどさ...
843デフォルトの名無しさん
2021/06/05(土) 01:35:57.62ID:qvRyjOjC844デフォルトの名無しさん
2021/06/05(土) 12:32:22.17ID:aDKd5nip プログラミング最大の罠のひとつ
自分で創作するよりも他人のソースを読む方が難しい
自分で創作するよりも他人のソースを読む方が難しい
845デフォルトの名無しさん
2021/06/07(月) 12:42:09.06ID:k7DmZ27b 昨日の自分は他人です
846デフォルトの名無しさん
2021/06/07(月) 20:28:43.19ID:qbMAaCDK 去年書いたコードが理解できない
847デフォルトの名無しさん
2021/06/07(月) 22:37:59.06ID:+U7TScWJ そりゃあ人間の能力は老化とともに衰えるから仕方ないね
848デフォルトの名無しさん
2021/06/07(月) 22:55:42.12ID:OC0V43xk ここ1, 2年で自分が書いたソースが回ってくることがあるけどほとんど覚えていなかった
今から振り返るともっといいやり方が思いつくけど、他人が書いたコードより遥かに行儀が良くて読みやすかった
今から振り返るともっといいやり方が思いつくけど、他人が書いたコードより遥かに行儀が良くて読みやすかった
849デフォルトの名無しさん
2021/07/01(木) 09:54:29.98ID:yiVYCTXd Hmatrixはcabalで入れたのにghciから:m Numeric.LinearAlgebraや
import Numeric.LinearAlgebraで行列演算モジュールを入れようとすると、
<no location info>: error:
Could not find module ‘Numeric.LinearAlgebra’
Perhaps you haven't installed the "dyn" libraries for package ‘hmatrix-0.20.2’?
Use -v to see a list of the files searched for.
とエラーが出るのだけど、よく分からない。ホームディレクトリにHmatrixのファイルっぽい
ものを置いてもダメ。Numericのフォルダをホームディレクトリに置いてもダメ
分かる人、教えてくださいm(_ _)m
古いパソコンの仮想linuxに入っている奴はimport Numeric.LinearAlgebraで
通常通り動くけど、その他のPCでは動かないんだよね。前は動いていたのもあったけど
ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった
関数型言語で行列演算さえ、導入にこれだけ苦労するとは、どういうことだいw
import Numeric.LinearAlgebraで行列演算モジュールを入れようとすると、
<no location info>: error:
Could not find module ‘Numeric.LinearAlgebra’
Perhaps you haven't installed the "dyn" libraries for package ‘hmatrix-0.20.2’?
Use -v to see a list of the files searched for.
とエラーが出るのだけど、よく分からない。ホームディレクトリにHmatrixのファイルっぽい
ものを置いてもダメ。Numericのフォルダをホームディレクトリに置いてもダメ
分かる人、教えてくださいm(_ _)m
古いパソコンの仮想linuxに入っている奴はimport Numeric.LinearAlgebraで
通常通り動くけど、その他のPCでは動かないんだよね。前は動いていたのもあったけど
ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった
関数型言語で行列演算さえ、導入にこれだけ苦労するとは、どういうことだいw
850デフォルトの名無しさん
2021/07/01(木) 13:56:29.22ID:m444U3IV > ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった
ちゃんとドキュメント読んでないよね?
ちゃんとドキュメント読んでないよね?
851デフォルトの名無しさん
2021/07/01(木) 18:53:55.58ID:dccggDtp ghciでimportを複数すると、プロンプトが
Prelude Data.Monoid Data.Traversable Data.Foldable>
と長くなってしまうので、importしたの表示しないようにするにはどうしたらいいのですか?
Prelude Data.Monoid Data.Traversable Data.Foldable>
と長くなってしまうので、importしたの表示しないようにするにはどうしたらいいのですか?
852デフォルトの名無しさん
2021/07/01(木) 18:56:14.18ID:dccggDtp すまん、自己解決した
:set promptを使えばいいのか
promptでググれば良かった
:set promptを使えばいいのか
promptでググれば良かった
853デフォルトの名無しさん
2021/07/01(木) 22:45:34.96ID:FFAeznD4 quarifiedも使えるよ
お好みで
お好みで
854デフォルトの名無しさん
2021/07/02(金) 03:41:23.49ID:aoQxpJoS855デフォルトの名無しさん
2021/07/10(土) 00:45:51.28ID:FlY7oUIG すいません
質問させて下さい
Ghc.Types というのを眺めてたんですが
謎の#が入ってるコンストラクターがいっぱい見えます
data {-# CTYPE "HsInt" #-} Int = I# Int#
data {-# CTYPE "HsDouble" #-} Double = D# Double#
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
などなど
なんですかコレ?
一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません
もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
質問させて下さい
Ghc.Types というのを眺めてたんですが
謎の#が入ってるコンストラクターがいっぱい見えます
data {-# CTYPE "HsInt" #-} Int = I# Int#
data {-# CTYPE "HsDouble" #-} Double = D# Double#
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
などなど
なんですかコレ?
一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません
もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
856デフォルトの名無しさん
2021/07/10(土) 08:27:37.09ID:9m9xryS6 https://wiki.haskell.org/Unboxed_type
記事内リンクも見てね
記事内リンクも見てね
857デフォルトの名無しさん
2021/07/10(土) 09:09:34.41ID:Qo9dk8cs >>856
なるほど
まだよくわかってないですけどunboxed typeというやつなんですね
後半もどなたか分かりませんか?
実は事情で“多倍長の浮動小数点”を自作したいのです
そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります
どこかに参考にできるライブラリ転がってませんか?
性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
なるほど
まだよくわかってないですけどunboxed typeというやつなんですね
後半もどなたか分かりませんか?
実は事情で“多倍長の浮動小数点”を自作したいのです
そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります
どこかに参考にできるライブラリ転がってませんか?
性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
858デフォルトの名無しさん
2021/07/10(土) 09:23:00.75ID:Qo9dk8cs 間違えた
Float classがsinとかいっぱいあって難しいです
Float classがsinとかいっぱいあって難しいです
859デフォルトの名無しさん
2021/07/10(土) 09:25:56.65ID:Qo9dk8cs 違う
Floating
orz
Floating
orz
860デフォルトの名無しさん
2021/07/10(土) 12:08:32.98ID:5i+2sdHC https://github.com/ghc/ghc/blob/master/libraries/base/GHC/Float.hs#L588
ライブラリがありそうな気がするけど、ghcクローンしてやりたいことできるか調べてみたら
ライブラリがありそうな気がするけど、ghcクローンしてやりたいことできるか調べてみたら
861デフォルトの名無しさん
2021/07/10(土) 12:28:39.86ID:5i+2sdHC hackageをfloatで検索した結果。怪しそうなやつ:
https://hackage.haskell.org/package/variable-precision
https://hackage.haskell.org/package/AERN-Real-Interval
https://hackage.haskell.org/package/variable-precision
https://hackage.haskell.org/package/AERN-Real-Interval
862デフォルトの名無しさん
2021/07/10(土) 23:01:22.87ID:zugIw5Ja あざっす
ソース読んで研究しまつ
ソース読んで研究しまつ
863デフォルトの名無しさん
2021/07/11(日) 06:49:31.34 リストのシャッフルは、2値ランダムと分割統治法で構成できるという境地に至った
864デフォルトの名無しさん
2021/07/11(日) 16:41:58.17ID:KhXXWhgG 余談だけど
オードリー・タン氏に性的に食指が動く
男性っているのかな。
オードリー・タン氏に性的に食指が動く
男性っているのかな。
865デフォルトの名無しさん
2021/07/16(金) 17:38:36.16 あののののの! なんで型コンストラクタ名が被ったらいけないんですか!
型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
866デフォルトの名無しさん
2021/07/16(金) 23:35:14.79 Esqueleto では SELECT 〜 FROM ONLY an_table 〜 みたいに ONLY を付けることで継承テーブルを対称から外すように指示することはできないんですか?
生SQLを書くしかありませんか?
生SQLを書くしかありませんか?
867デフォルトの名無しさん
2021/07/17(土) 15:02:59.17ID:eTC1af8g >>864
ちょまどは鳳唐好きだって言ってた
ちょまどは鳳唐好きだって言ってた
868デフォルトの名無しさん
2021/07/17(土) 17:39:27.65ID:44fEdIj7 私は、MBAを取るために、ハワイにある伝統的なビジネススクールに通っていたとき、どこかの大企業で
働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。
ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから
ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。
とんだお笑い草だと思った。
講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63
彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。
安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は
たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、
素晴らしいビジネススキルのある人はほとんどいなかったということだ。
彼らのほとんどは給料なしで生きていけなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。
ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから
ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。
とんだお笑い草だと思った。
講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63
彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。
安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は
たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、
素晴らしいビジネススキルのある人はほとんどいなかったということだ。
彼らのほとんどは給料なしで生きていけなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
869デフォルトの名無しさん
2021/07/17(土) 18:54:41.40ID:lhv7ZvYo 言語設計者に対する悪口はそこまでにしてやれ
870デフォルトの名無しさん
2021/07/18(日) 08:48:06.51ID:p5uFvWrN まあ、生きていけないぞー死ぬぞーってのが机上の空論の中でも最悪の論だよな
実際には死なない人が多い
実際には死なない人が多い
871デフォルトの名無しさん
2021/07/18(日) 22:53:21.56 すいません、僕がスレを軽率に上げてしまったばっかりにワードサラダBOTの餌食なってしまうとは・・・
872デフォルトの名無しさん
2021/07/19(月) 09:08:56.51ID:Niob4uA5 現状これはとりあえず有効にしとけみたいなGHC拡張ってなにがありますか
873デフォルトの名無しさん
2021/07/19(月) 10:46:43.62ID:jaES3hbu874デフォルトの名無しさん
2021/07/26(月) 04:08:52.62ID:FlIQ/SVE ttps://cognicull.com/ja
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
875デフォルトの名無しさん
2021/07/26(月) 12:01:28.04ID:nPPC7Onz876デフォルトの名無しさん
2021/07/27(火) 03:35:04.64 Data.Arrayって廃止されたの?
GHC.Arr を使えってこと?
GHC.Arr を使えってこと?
877デフォルトの名無しさん
2021/07/27(火) 05:37:33.58ID:O4N47kXx >>876
Data.Array は array パッケージにあります。
Data.Array は array パッケージにあります。
878デフォルトの名無しさん
2021/07/27(火) 15:27:28.97ID:6BJr6nx6 >>874
フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う
利用者も然りなのはむしろ良い傾向
他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う
利用者も然りなのはむしろ良い傾向
他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
879デフォルトの名無しさん
2021/07/28(水) 02:22:30.38 >>877
詳しい情報サンクス
詳しい情報サンクス
880デフォルトの名無しさん
2021/07/30(金) 13:54:44.53ID:kX7UidPf >>874
Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
881デフォルトの名無しさん
2021/07/30(金) 14:32:21.44ID:yBIo03BR すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市「発言は撤回しない。謝罪もするな。外務省局長!任せたぞ。」👈なにをさせたかったの?😲 [826239858]
- 【実況】博衣こよりのえちえち歌枠🧪
- 外務省局長、よくわからないまま帰国へ [834922174]
- ぶっちゃけ普通の日本人は台湾とかどうでもよくて、野蛮な反日国中国が偉そうにするのがムカつく!という感情論だけだよね… [452836546]
- 自分に自信がない女の子、陽キャ美容室で80cmのエクステを付けた結果wwwwwwwwwwwwwwwwwww [329329848]
