関連書籍 ・Introduction to Functional Programming Using Haskell (2nd ed.) ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/ ・Haskell: The Craft of Functional Programming ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/ ・The Fun of Programming ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/ ・The Haskell School of Expression: Learning Functional Programming Through Multimedia ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/ ・入門Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/ ・ふつうのHaskellプログラミング ttp://item.rakuten.co.jp/book/4052963/ ・Programming in Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/ ・Real World Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980 ・関数プログラミングの楽しみ ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056 ・すごいHaskellたのしく学ぼう! ttp://www.amazon.co.jp/dp/4274068854
3 :
関連リンク ・GHC Wiki ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex ・A History of Haskell ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/ ・関数型関連の用語集 ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/ ・本物のプログラマはHaskellを使う ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend ・Haskell API search Engine ttp://www.haskell.org/hoogle/ 【簡単な使い方】 1.検索バーに関数名を入れて検索 例 map 2.検索バーに型名を入れて検索 例 (a -> b) -> [a] -> [b] ・Real World Haskell ttp://book.realworldhaskell.org/read/ ・Learn You a Haskell for Great Good! ttp://learnyouahaskell.com/chapters
4 :
Haskell初心者ですが、RealWorldHaskell読んでいて、状態モナドもどきを自作してみようと思って newtype State s a = StateMonad { stateFunc :: s -> (a,s) } とやってみて somefunc :: (a -> b) -> State s a -> State s b somefunc f (StateMonad g) = StateMonad( \s-> (f(fst(g s)), snd(g s))) は通るのに instance Functor (State s) where fmap :: (a -> b) -> State s a -> State s b fmap f (StateMonad g) = StateMonad( \s-> (f(fst(g s)), snd(g s))) が通らないのがわからなくて困っています。 ★質問: fmap をどのように宣言するのが正解なのでしょうか? (fmap :: (a -> b) -> State s a -> State s b の一行を消しても型推論で通りますが、それは気持ち悪いのです)。
5 :
1(゚д゚ )乙 これは乙じゃなくてポニーテールなんたらかんたら 自分も基礎的質問で申し訳ないが Free Monadがらみの記事にあった data Fix f = Fix (f (Fix f)) はどういう意味になるんでしょう? data Fix f = FixC (f (Fix f))でもいいものだと思いますが、コンストラクタ引数のf (Fix f)がわからんとです。FixCに2つの引数を渡す? でもそれだとdata Fix f = FixC f (Fix f)となるんでしたでしょうか? 二つの型を型引数としてもつ型を渡すという意味? http://www.haskellforall.com/2012/06/you-could-have-invented-free-monads.html
6 :
>>5 data Fix f =Fix (f (Fix f)) とすると、値コンストラクタFixは、ひとつの f (Fix f) 型の引数をとる Fixはkindが (*->*)->* fはkindが *ー>* つまり、f自体が何かひとつの型引数をとるということ fを[]とすれば Fix::[Fix []] ー> Fix [] fをMaybeとすれば Fix::Maybe (Fix Maybe) -> Fix Maybe fを(,) a とすれば Fix::(a, Fix ( (,) a ) ) -> Fix ( (,) a )
指定したN番目の値を返す関数を作りたいのですが、上手く出来ません。 例えば、nthElementIs [1,2,3,4] 3 > 3見たいにしたいです。 isTrue :: Int -> Bool isTrue number | number > 0= False | otherwise= True nthElementIs :: [a] -> Int -> a nthElementIs list number = case (list) of [] -> case (number) of 0 -> [] otherwise -> error"okh" (x:[]) -> case (number) of 1 -> x otherwise -> error"z" (x:xs) -> case (number) of isTrue -> error"df" otherwise -> nthElementIs xs (number - 1)
>>51 > エラー書くよりはMaybe使った方がやはりいいのでしょうか? > 後、ガードとcaseの使い分けはあるのでしょうか? すまん。自分も習いはじめでよくわからんとです。 >>52 教科書読んだばかりですから !! 一流のHaskellerになると関数合成ばしばし使うのですね。 自分、関数合成にまだ発想が行きません。 便乗質問ですが、ピリオドとダラーの使い分けなんですけど、 nthElementIs xs num = last . take num $ xs も nthElementIs xs num = last $ take num $ xs も nthElementIs xs num = last $ take num xs も結果は同じなのですがどう使い分けてます ? 本来なら(引数の順番さ000え逆だったら、nthElementIs num xsだったら) nthElementIs num = last . take num って書きたかったのでしょうけど
Haskell(GHC)で最も意味不明のエラー in 俺 * is a rigid type variable bound by 〜
93 :
data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Eq, Show) fromDayToNum :: Day -> Int fromDayToNum day = case (day) of Mon-> 0 Tue -> 1 Wed -> 2 Thu -> 3 Fri -> 4 Sat -> 5 Sun -> 6 fromNumToDay :: Int -> Day fromNumToDay number = case (number) of 0 -> Mon 1 -> Tue 2 -> Wed 3 -> Thu 4 -> Fri 5 -> Sat 6 -> Sun isWorkDay :: Day -> Bool isWorkDay day | (fromDayToNum day >= 0 && fromDayToNum day <= 4) = True | otherwise = False isWorkDay' :: Day -> Bool isWorkDay' day = case (day) of (fromDayToNum day >= 0 && fromDayToNum day <= 4)-> True _-> False 何故、isWorkDay' はfromDayToNumを使えないのでしょうか?
94 :
>>93 case 中の -> の左側はパターンしか書けない 関数適用はパターンではないので、そういう使い方はできない パターンは例をたくさん見ると理解がはやいと思う 直感的には構造で分岐する