[Haskell-cafe] Show me
Ryan Ingram
ryani.spam at gmail.com
Wed Aug 6 14:03:05 EDT 2008
You may find this helper function useful:
> showAp :: Show a => Int -> String -> a -> ShowS
> showAp n f x = showParen (n > ap_prec) inside
> where
> inside = showString f . showString " " . showsPrec (app_prec+1) x
> ap_prec = 10 -- "precedence" of function application; higher than any infix operator.
You can use it like so:
> instance Show x => Show (Foo x) where
> showsPrec n foo = showAp n "list_foo" (foo_list foo)
See the Haskell 98 report section 10.5 "Derived Instances: An Example":
http://www.haskell.org/onlinereport/derived.html
-- ryan
On Tue, Aug 5, 2008 at 8:41 PM, Jonathan Cast <jonathanccast at fastmail.fm> wrote:
> On Tue, 2008-08-05 at 20:28 +0100, Andrew Coppin wrote:
>> Suppose we have the following:
>>
>> data Foo x
>> list_foo :: [x] -> Foo x
>> foo_list :: Foo x -> [x]
>>
>> What would be the best way to write a Show instance?
>>
>> The thing that I came up with is
>>
>> instance (Show x) => Show (Foo x) where
>> show foo = "list_foo " ++ show (foo_list foo)
>>
>> But apparently you're supposed to use the strange "showsPrec" method
>> that I don't understand. So can somebody show me a correct instance
>> definition for this type please?
>
> instance Show x => Show (Foo x) where
> showsPrec n foo = ("list_foo "++) . shows (foo_list foo)
>
> You use the n parameter if you've got an infix operator in your syntax
> and you want to put parentheses around an instance of it if n has the
> wrong value (either too high or too low, I can never remember).
>
> jcc
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list