コンテキストでの型の操作 コンテキストとしてのリスト:Applicative型クラスをさらに掘り下げる コンテナとテキスト
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(コンテキストでの型の操作)、LESSON29(コンテキストとしてのリスト:Applicative型クラスをさらに掘り下げる)、29.2(コンテナとテキスト)、クイックチェック 29-3の解答を求めてみる。
(1, 2)、(3, 4)と(3, 5, 5, 6)は型が異なるから。
実際にはどうなるかを確認。
入出力結果(Terminal, Zsh)
% ghci
GHCi, version 8.10.7: https://www.haskell.org/ghc/ :? for help
Loaded package environment from /Users/…/.ghc/x86_64-darwin-8.10.7/environments/default
macro 'doc' overwrites builtin command. Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /Users/…/.ghc/ghci.conf
Prelude
λ> pure (+) <*> (1, 2) <*> (3, 4)
<interactive>:1:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘print’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Show Ordering -- Defined in ‘GHC.Show’
instance Show Integer -- Defined in ‘GHC.Show’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
...plus 22 others
...plus 12 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of an interactive GHCi command: print it
(0.08 secs,)
Prelude
λ> pure (+) <*> (1, 2) <*> (3, 4) :: (Int, Int)
<interactive>:2:1: error:
• No instance for (Monoid Int) arising from a use of ‘<*>’
• In the expression: pure (+) <*> (1, 2) <*> (3, 4) :: (Int, Int)
In an equation for ‘it’:
it = pure (+) <*> (1, 2) <*> (3, 4) :: (Int, Int)
(0.01 secs,)
Prelude
λ> pure (+) <*> (1, 2) <*> (3, 4) :: (Int, Int, Int, Int))
<interactive>:3:1: error:
Invalid type signature: pure (+) <*> (1, 2) <*> (3, 4) :: ...
Should be of form <variable> :: <type>
Prelude
λ> :quit
Leaving GHCi.
%