Trying to add metadata for urls for next and previous links but can't resolve error

23 views
Skip to first unread message

Abner Gershon

unread,
Jan 1, 2025, 11:07:06 PMJan 1
to hakyll
I am seeking to create a series of "slides", ie webpages, to be used in a presentation. I thought this might be a good way to get to know Hakyll a bit.

Here is the fragment of code that I use to define the slide context, slideCtx
---
slideCtx :: Context String
slideCtx =
    field "prevSlide" $ \item -> do
        metadata <- getMetadata (itemIdentifier item)
        return $ maybe "" id $ lookupString "prevSlide" metadata
    `mappend`
    field "nextSlide" $ \item -> do
        metadata <- getMetadata (itemIdentifier item)
        return $ maybe "" id $ lookupString "nextSlide" metadata
    `mappend`
    defaultContext
---
This results in the following error message:

site.hs:79:5: error: [GHC-83865]
    • Couldn't match expected type: Compiler String
                  with actual type: Context String
    • In the second argument of ‘mappend’, namely ‘defaultContext’
      In the expression:
        do metadata <- getMetadata (itemIdentifier item)
           return $ maybe "" id $ lookupString "nextSlide" metadata
          `mappend` defaultContext
      In the second argument of ‘($)’, namely
        ‘\ item
           -> do metadata <- getMetadata (itemIdentifier item)
                 return $ maybe "" id $ lookupString "nextSlide" metadata
                `mappend` defaultContext’
   |
79 |     defaultContext
   |     ^^^^^^^^^^^^^^
(ERROR)-(Exit Code 1)-(General error)
--- full site.hs attached attached below
I get that there is a type error, specifically that defaultContext has type Context String and should be Compiler  String. Just not sure how to resolve this. I have been struggling with this for quite a while now and really have no clue how to fix this.
Gratefully,
Abner


site.hs

Alexander Batischev

unread,
Jan 2, 2025, 8:05:32 AMJan 2
to hak...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello Abner,

On Wed, Jan 01, 2025 at 06:29:35PM -0800, Abner Gershon wrote:
> In the expression:
> do metadata <- getMetadata (itemIdentifier item)
> return $ maybe "" id $ lookupString "nextSlide" metadata
> `mappend` defaultContext

Apparently the compiler thinks that ``` `mappend` defaultContext ``` is
part of the second argument to `field "nextSlide"`. I think it happens
because `($)` takes the rest of the expression as the argument.

I believe you can fix this with some parentheses:

```
slideCtx :: Context String
slideCtx =
(field "prevSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "prevSlide" metadata)
`mappend`
(field "nextSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "nextSlide" metadata)
`mappend`
defaultContext
```

`mconcat` might be more readable:

```
slideCtx :: Context String
slideCtx =
mconcat
[
field "prevSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "prevSlide" metadata
, field "nextSlide" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
return $ maybe "" id $ lookupString "nextSlide" metadata
, defaultContext
]
```

- --
Regards,
Alexander Batischev

PGP key 356961A20C8BFD03
Fingerprint: CE6C 4307 9348 58E3 FD94 A00F 3569 61A2 0C8B FD03

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEzmxDB5NIWOP9lKAPNWlhogyL/QMFAmd2jw0ACgkQNWlhogyL
/QOsShAAu3PHpz1OCg5wRW5oaICF+fpJ6IvXk7G2ItXqt4zAyH0prbIHQV1iDiID
4ZQlBvs9XF7VbDNyt8vv8K5HzFeclQ6BxVPTtwwFEF6kKKmTfnBxpNXzTpBsCaAb
kA3xgBKybG7GQwzao/xr7i+eLHl5tLXlQM7GlqVMbVC8OLliSs5o6wxoBr9yB2iJ
HJRIT2sTL2dTQWTLomHd3hWv5LNfKTGSANyIPdctelnODYWvVrphQg3XM6fquJjw
eHo4aaNClQwKUkSBLrgKHiaAPeN2CLQaGlEpcktH2sI8I+WHzRp/PAUd4X7yPUYt
gaKmSYdPxsJ4Yubd0AxkaYhDf5sWr5iFlTiiNHVYF0yQGuIOBKfn3fLeZ8cUFZYa
M/ZK+rAZQ5YLyzTyWb4FnPf+9/jGmzzAbcETRukOSeXT+7l1Mg2OSvjCP/JmntSu
NANMfAk43elG/hRJoGIWczqpYndQaRRlHYLxheSyaorX5nXXQvnJLYOKChu8dCLq
WZRszZYI/VUogkGax+M/VEZ1vUHBUUd4+Lj7H0/H8Y3UhHoOJRxKmKqqs/vxwsSC
Mg/sV+18osL+8G0DfBZUkxxqlUiSdtldBWBneDhXb2SfG31YhYFfwA46LK1E9h+V
WLai5JaSuX21IokEdw+zBPXSUbDXqWL2huKiHn3MfsYIz7zRuaY=
=oPDq
-----END PGP SIGNATURE-----

Abner Gershon

unread,
Jan 2, 2025, 3:21:05 PMJan 2
to hakyll
Thanks so much. This solution works like a charm.
Reply all
Reply to author
Forward
0 new messages