Skip to content

Instantly share code, notes, and snippets.

@akiradeveloper
Created August 9, 2011 02:58
Show Gist options
  • Save akiradeveloper/1133308 to your computer and use it in GitHub Desktop.
Save akiradeveloper/1133308 to your computer and use it in GitHub Desktop.
While Functor prototype failure
newtype While a = While { get :: (a, Bool) }
instance Functor While where
fmap f (While (a, True)) = let (a', b) = f a in While (a', b)
fmap _ (While (a, False)) = While (a, False)
countDown :: Int -> (Int, Bool)
countDown i =
let i' = i - 1
in
if i' < 0 then (i, False) else (i', True)
main = do
let result = get $ While (1, True) `fmap` countDown `fmap` countDown
print result
@md2perpe
Copy link

md2perpe commented Aug 9, 2011

You're right. I didn't notice the ' after one of the i:s.

You could however write

While $ if i' < 0 
  then (i, False)
  else (i', True)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment