質問するログイン新規登録

回答編集履歴

2

追加の質問への回答

2021/07/26 05:12

投稿

kakkun61
kakkun61

スコア285

answer CHANGED
@@ -29,4 +29,24 @@
29
29
  print hoge
30
30
  ```
31
31
 
32
- rank-N types を使用する方法もありますが発展的な内容なので省略します。
32
+ rank-N types を使用する方法もありますが発展的な内容なので省略します。
33
+
34
+ ----
35
+
36
+ > 出力のIntItem、StringItemといった文字を消すことは出来ますでしょうか?
37
+
38
+ 自前の文字列化関数を用意します。
39
+
40
+ ```haskell
41
+ toString :: Item -> String
42
+ toString (IntItem n) = show n
43
+ toString (StringItem s) = s
44
+ ```
45
+
46
+ これを使用すると次のように書けます。
47
+
48
+ ```haskell
49
+ main = do
50
+ putStrLn $ toString $ IntItem 1
51
+ putStrLn $ toString $ StringItem "a"
52
+ ```

1

誤解をまねかないように

2021/07/26 05:12

投稿

kakkun61
kakkun61

スコア285

answer CHANGED
@@ -1,4 +1,4 @@
1
- `[String] -> a` という型は、その関数のどの部分が実行されても単一の `a` という型の返り値になる必要があります。
1
+ `[String] -> a` という型は、その関数のどの部分が実行されても単一の `a` という型の返り値になる必要があります。
2
2
  つまり下記のコードの (1) の部分と (2) の部分が同じ型であることを要求します。
3
3
  下記の場合は `Num a => a` と `String` という別々の型になるので型検査でエラーになります。
4
4