私は現在、20 の Intermediate Haskell Exercisesを実行しようとしています。最初の 3 つの演習を完了することができました (ただし、これはfurry
==fmap
とLearn You a Haskellに既にそれらの実装があるためです)。私は現在、次のようなインスタンスで立ち往生しています:
instance Fluffy (EitherLeft t) where
furry = error "todo"
私は何をすべきか本当に理解していません。Learn You Haskell には、タプルを受け取るというnewtype
変数があります。Pair
その後、次のようにパターン マッチングを実行できます。
fmap f (Pair (x,y)) = Pair (f x, y)
私はあなたが私の状況で似たようなことをすることができるかもしれないと考えていました:
furry f (EitherLeft (Either a b)) = EitherLeft (Either (f a) b)
しかし、それはうまくいきません:
Not in scope: data constructor `Either'
import Data.Either
彼が持っていて私が持っていない重要なものがあるかもしれないので、私はそうするかもしれないと思っていました。しかし、それは問題ではありませんでした。
私もこれを機能させようとしました:
furry f (EitherLeft a b) = error "todo"
しかし、それもうまくいきません:
Constructor `EitherLeft' should have 1 argument, but has been given 2
私もこれを機能させることができませんでした:
furry f (Right x) = (Right f x)
furry f (Left x) = Left x
エラーが発生しました:
Couldn't match expected type `EitherLeft t a'
with actual type `Either t0 t1'
私は得ることができただけです:
furry f (EitherLeft t) = error "todo"
仕事に。しかし、私は何をすべきかわかりませんt
。
必ずしも答えが欲しいわけではありません。私は何をすべきかについてのヒントが必要です。私は読んでいて、例をある程度理解することができますが、自分でこのようなものを正しくコーディングすることに頭を悩ませることはできません。
ダンに感謝します。これが私の解決策として思いついたものです。
instance Fluffy (EitherLeft t) where
furry f (EitherLeft (Left x)) = EitherLeft $ Left (f x)
furry f (EitherLeft (Right x)) = EitherLeft $ Right x