Haskellの良さを俺にも分かるように教えて

1名無しさん@Next2ch:2015/10/31(土) 09:19:23.84 ID:4O/6ZgFL

関数型言語は理解できたが何故Haskellがあれ程信仰されているのか分からない
具体的にどこが凄いのか教えて

21:2015/12/06(日) 22:03:26.94 ID:PupWOklf

やっと意味が分かるようになったわ
よくこんな面倒なの扱えんな

3名無しさん@Next2ch:2015/12/14(月) 01:44:05.29 ID:81Uv0ueS

最近はじめた
練習でエイトクイーン書いたのでだれかコードレビューしてくれよん
MaybeからListに変換するあたりがどうすんのかよくわかってない

import System.IO
import Control.Applicative

main = do
let e = [[]] >>=putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne >>= putOne
print $ e !! 0
print $ e !! 1
print $ e !! 2
print $ e !! 3
print $ e !! 4
print $ length e

type Positions = [(Int, Int)]

-- put one queen on (x,y)
put :: Positions->Int->Int->Maybe Positions
put poss x y
| canPut poss x y = Just $ (x,y):poss
| otherwise = Nothing
where
canPut poss x y = (inBoard x y) && not (crossAny poss x y)
inBoard x y = all (\x->x `elem` [1..8]) [x,y]
cross pos x y = fst pos == x || snd pos == y || abs (fst pos - x) == abs (snd pos - y)
crossAny poss x y = any (\pos->cross pos x y) poss

-- put one queen on puttable place
putOne :: Positions -> [Positions]
putOne [] = map (:[]) $ (,) <$> [1..8] <*> [1..8]
putOne poss@(pos:_) = let xys = [(x,y) | x<-[1..8], y<-[1..8], x>fst pos || (x == fst pos && y>snd pos)] in
xys >>= (\(x,y)->maybeToList $ put poss x y)
where
maybeToList maybe = case maybe of
Nothing -> []
Just(a) -> [a]

4名無しさん@Next2ch:2015/12/17(木) 18:38:35.25 ID:WKS9wPTi

人口少ない割に知名度あるから使えると尊敬される

5名無しさん@Next2ch:2015/12/21(月) 15:21:21.88 ID:8hDhs23M

なんとなくだけどモナドって検査例外と似てる

6名無しさん@Next2ch:2016/01/10(日) 01:46:47.95 ID:hplO3UQn

haskellerが気持ち悪い理由はワンライナーだから 以上

7名無しさん@Next2ch:2016/01/13(水) 10:14:08.69 ID:FCRNZHpr

理解は進んだがこれで実用的なプログラムを書けるようになるまでかなり掛かりそうだ

8名無しさん@Next2ch:2016/01/15(金) 09:23:44.97 ID:J84T2JMe

可読性のいいhaskellってどう書くんだろう
それとioモナドはオブジェクト志向と組み合わせると良くなりそうだなと感じた

9名無しさん@Next2ch:2016/01/17(日) 20:45:18.30 ID:mEuOQRae

Applicative使いこなしたい


レスを書き込む