アプリカティブスタイルで

```

    (++) <$> Just "a" <*> Just "b" -- = Just "ab"
    
```

のような例がよくありますが、これを

```

    (++) <$> Just "a" <*> Just "b" <*> Just "c" <*> ... -- Just "abc...
    
```

と繋げていくように記載することは出来ないでしょうか？
CC BY-SA 4.0
2019-02-20T14:51:00.690
52907
2019-02-20T21:39:26.327
19620
question
haskell
Applicativeを使って複数の文字列を結合するにはどうすればいいですか
```

    (++) <$> Just "a" <*> Just "b" -- = Just "ab"
    
```

で、Maybe String が二つしか連結できないのは、そもそも元の`(++)`が引数を二つしか取れないからです。別の言い方をすれば、`(++) "a"
"b"`をMaybeアプリカティブにしたものが上の式です。

`(++)`単独では任意の個数の文字列をとることができないので、まずアプリカティブにする前に、素の文字列で任意の個数の文字列を連結する方法を考えます。

```

    foldl1 (++) ["a", "b", "c"] -- = "abc"
    
```

あとは、文字列と関数をアプリカティブにします。

```

    foldl1 (liftA2 (++)) [Just "a", Just "b", Just "c"] -- = Just "abc"
    foldl1 (liftA2 (++)) [Just "a", Nothing, Just "c"] -- = Nothing
    
```
CC BY-SA 4.0
2019-02-20T21:39:26.327
52909
2019-02-20T21:39:26.327
3605
52907
answer